Lobsters | 📄 原文链接 | 2026-08-15 收录

Lisp 子类型的意外行为:受限数组类型为何通不过检查

来源:simondobson.org — 2026-08-07

📋 概述

作者在用 SBCL(Common Lisp 实现)时撞上一个意外:一个结构体声明了 (simple-array (unsigned-byte 16)) 类型的槽,默认值 #1A() 与初始值 #1A(1 2 3) 都通不过类型检查。原因是字面量 #1A() 被推断为 (simple-vector 0)、#1A(1 2 3) 为 (simple-vector 3),二者都不是受约束数组的子类型。作者推测这与编译器可按元素类型优化存储、从而不便与 simple-vector 比较有关。

🔑 核心要点

💡 金句

看似顺理成章的子类型关系,在受限数组面前翻了车。
← 返回 Lobsters 首页