NNBD:String 和 Null 的最小上界
NNBD: Least upper bound of String and Null
正在为 Dart 分析器中的一些问题打补丁,我需要了解 Null 本身是否被视为可空类型。
目前,Dart 的类型代数为 String 和 Null 计算的最小上限是 String。
但是,在我看来,String 和 Null 的类型联合是一个可为 null 的 String。
带补丁的票:https://github.com/dart-lang/sdk/issues/38585请注意,补丁仍然存在将 T 扩展到 T 的错误?如果闭包 returns T 和 null.
红利问题(ticket https://github.com/dart-lang/sdk/issues/38623):Null 本身是可空类型并且应该以'?'为后缀吗?
我的观点反证法(LUB是最小上界函数):
- 假设 Null 不可为空。
- 那表示Null和Null?是不同的类型。
- LUB(T, Null) = T?, 即结合 T 和 Null 将 T 扩展为 T?
- 因此,LUB(Null, Null) = Null?
- 这违反了 LUB 的自反性,这意味着 LUN(Null, Null) = Null
- 因此假设是错误的。
Dart 还没有非空类型。因此,写为 String
的类型是 可以为 null 的字符串。 Null
类型被认为是任何类型的子类型,因此 Null
和 (nullable) String
的最小上限是 (nullable) String
.
当 Dart 获得不可为 null 的类型时,这将会改变。那么写成 String
的类型将是不可空的,而 String?
将是可空的,然后 Null
和 String
的最小上限应该(希望如此!)是 String?
。 Non-nullable types 尚不可用,但它们正在设计中并有望发布......好吧,当它们准备好时。
如果您正在尝试修补 Dart 分析器,那么您需要同时了解这两种类型系统,因为如果您传递适当的标志,分析器已经被修改为识别一些不可为 null 的类型和正确的源代码。
正在为 Dart 分析器中的一些问题打补丁,我需要了解 Null 本身是否被视为可空类型。
目前,Dart 的类型代数为 String 和 Null 计算的最小上限是 String。
但是,在我看来,String 和 Null 的类型联合是一个可为 null 的 String。
带补丁的票:https://github.com/dart-lang/sdk/issues/38585请注意,补丁仍然存在将 T 扩展到 T 的错误?如果闭包 returns T 和 null.
红利问题(ticket https://github.com/dart-lang/sdk/issues/38623):Null 本身是可空类型并且应该以'?'为后缀吗?
我的观点反证法(LUB是最小上界函数):
- 假设 Null 不可为空。
- 那表示Null和Null?是不同的类型。
- LUB(T, Null) = T?, 即结合 T 和 Null 将 T 扩展为 T?
- 因此,LUB(Null, Null) = Null?
- 这违反了 LUB 的自反性,这意味着 LUN(Null, Null) = Null
- 因此假设是错误的。
Dart 还没有非空类型。因此,写为 String
的类型是 可以为 null 的字符串。 Null
类型被认为是任何类型的子类型,因此 Null
和 (nullable) String
的最小上限是 (nullable) String
.
当 Dart 获得不可为 null 的类型时,这将会改变。那么写成 String
的类型将是不可空的,而 String?
将是可空的,然后 Null
和 String
的最小上限应该(希望如此!)是 String?
。 Non-nullable types 尚不可用,但它们正在设计中并有望发布......好吧,当它们准备好时。
如果您正在尝试修补 Dart 分析器,那么您需要同时了解这两种类型系统,因为如果您传递适当的标志,分析器已经被修改为识别一些不可为 null 的类型和正确的源代码。