在为 Dart Analyzer 中的某些问题打补丁时,我需要了解 Null 本身是否被视为可空类型。
目前,Dart 的类型代数为 String 和 Null 计算的最小上界是 String。
但是,在我看来,String 和 Null 的类型联合是可以为空的 String。
有补丁的票:https ://github.com/dart-lang/sdk/issues/38585注意补丁还是有把T扩大到T的bug?如果闭包同时返回 T 和 null。
奖金问题(票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
- 因此假设是错误的。