【发布时间】:2017-10-20 22:20:09
【问题描述】:
对象可以向任一方向投射,这是不安全的。如何强制任何对象为 null 并在生产代码中使用它们?
例如,在 Option<'T> 中,我现在可以轻松地通过 3 种方法来创建可空类型:Some (Unchecked.defaultof<'T>)、None 和 null。
【问题讨论】:
-
你能提供更多的上下文吗?你想在这里做什么?您将如何在代码中使用生成的 null? “物体可以向任一方向投射”到底是什么意思?
-
@TheQuickBrownFox 一位 OCamler 对我说 F#“一个无法使用的坏类型系统”,并准确引用了“对象系统已损坏并且与语言的其余部分不匹配。尽管“没有 null “例如,它确实有 null。对象可以在任一方向上投射(不安全)”。你能解释一下他的意思吗?
-
这对我来说就像他在谈论支持 c# interop 的所有东西,这需要 F# 也有 null。但这并不意味着使用它是一个好主意。
-
可能一直在谈论向上转换和向下转换。 F# 确实有一个编译时安全向上转换运算符
:>,但它也允许您使用:?>运算符尝试不安全向下转换,这可能会引发异常。但是对于不安全的强制转换,您通常会使用类型测试模式进行模式匹配,:? -
OCamlers 对 F# 的评价持保留态度,他们可能对整个事情有点酸;)