F#的`box`关键字作用是什么?其官方文档在哪里?
F#中
box关键字的作用 在F#的类型系统里,值类型(比如int、bool这类)和引用类型是严格区分的,box的核心作用就是把任意类型的值(包括值类型)包装成.NET的obj(即System.Object)类型。
为什么检查null需要用到box?因为F#里值类型本身不可能是null,只有引用类型(或可空类型)才有可能为null。如果直接对值类型变量做null匹配,编译器会直接报错——这在语法上是完全无效的。而通过box包装后,不管原变量是什么类型,都会变成obj类型的引用:
- 如果原引用类型的值本身是
null,包装后依然是null - 如果原是值类型,包装后会生成一个包含该值的
obj实例,不可能为null
你看到的这段检查任意值是否为null的代码:
match box value with | null -> printf "The value is null." | _ -> printf "The value is not null."
本质就是先把value统一转为obj类型,再通过模式匹配判断这个包装后的引用是否为null,这样就能兼容所有类型的输入,不管是值类型还是引用类型。
补充一句:和box对应的操作是unbox,用来把包装后的obj类型转换回原类型,但要确保类型匹配,否则会抛出运行时异常。
内容的提问来源于stack exchange,提问作者toraritte
相关产品推荐
相关产品推荐

