看来你真正想知道的是评论中引用的这句话:
尽管"没有空"但它确实有空,例如.对象可以向任一方向投射(不安全)
让我们首先澄清一些F#术语:
"Nullable"指的是一种类型的直接赋值为null的能力,如在写入null预期此类型的位置.F#允许此类类型与其他CLI语言互操作,具有Nullable Operators或AllowNullLiteralAttribute等功能.C#中定义的引用类型通常是可空的,因此F#程序员可以使用使用null的C#库.
"对象"指的是几乎任何东西,甚至是值类型,除非它们被另外装箱,否则它们不能为空 - 但是我很难想象处理分配为null的盒装值类型的合理代码.
因此,将选项称为可空类型不是正确的F#术语,因为如果不显式使用不安全的函数,则无法为其指定null.虽然选项在内部使用null,但这通常被视为实现细节.
考虑到这一点,你想知道的引用可能是指赋予nullF#中任何引用类型的能力,其表达式如下Unchecked.defaultof<MyRecordType>.这可以在null无效的位置使用,有效地规避了对于正常记录类型应该禁止null的更严格的类型.
我认为这是一个相当弱的批评,因为使用Unchecked模块中的函数应警告程序员他们正在绕过安全机制.这样做很少是必要的,因此这种类型安全性的降低不会导致很多错误.
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |