Lean 语言参考

12.1. 拳击🔗

Lean 值可以在运行时以两种方式表示:

  • Boxed值可能是指向堆值的指针或需要移位和屏蔽。

  • Unboxed值立即可用。

装箱值可以是指向对象的指针(在这种情况下最低位为 0),也可以是立即值(在这种情况下最低位为 1),并且通过将表示形式向右移动一位来找到该值。

具有未装箱表示的类型(例如 UInt8enum inducing 类型)在编译器可以确定该值具有所述类型的上下文中表示为相应的 C 类型。 在某些情况下,例如 Array 等通用容器类型,否则未装箱的值必须在存储之前装箱。 换句话说,使用 Bool.not 调用并返回未装箱的 uint8_t 值,因为 enum inducing 类型 Bool 具有未装箱的表示形式,但 Array Bool 中的各个 Bool 值已装箱。 归纳类型的构造函数中 Bool 类型的字段表示为未装箱,而存储在实例化为 Bool 的多态字段中的 Bool 则为装箱。