我不明白Null在Dart是什么。
在C#语言中,null是一个文字。null是引用类型变量的默认值。
null in C#没有任何类型。不可能通过点null访问.的成员。
示例:
String s = null; // the default value of reference-type variable
null.GetType(); // Operator '.' cannot be applied to operand of the type <null>在Dart中,null有一个类型Null。但是Dart中的Null类型的实例不是bottom类型。
如何根据类型继承在Dart中工作?
// How the `null` value with type of `Null`
// can be assigned to a `String` type?
String s = null;此代码在Dart编辑器中生成奇怪的警告。
"Tests for null should be done with '== null'".
print(s is NUll);但我不想要“null测试”。我要Null考试。这可不一样。
为什么这个奇怪的警告在省道编辑?
我想测试如何工作Dart类型的系统,但编辑器给我这条消息。
我不理解它,因为我无法理解Null类型是如何同时出现的:
我欢迎开发人员的回答。
是否有任何与面向对象编程( Dart语言规范中没有记录的)相反的魔术,即如何将不兼容类型假定为兼容类型?
附注:
Dart中的Null类型是完整类,因此它是一个regular type。
我没有找到与之相反的官方文档( Null类型不是regular类型,而是bottom类型)。
这是我说话的证据。
class Null {
factory Null._uninstantiable() {
throw new UnsupportedError('class Null cannot be instantiated');
}
/** Returns the string `"null"`. */
String toString() => "null";
}您可以看到,Null不是bottom类型。
这里可以看到,null不是bottom类型,而是Null类型。
print(null.runtimeType == Null);true附注:
我不明白为何有些人不明白问题,而导致矛盾的例子。
The static type of null is bottom.不对。null类型是Null类型,而不是bottom类型。
我已经给出了证据
null.runtimeType == Null但不是bottom类型Null不是bottom类型(请参阅bottom中的源代码)。附注:
为什么所有这些答案都不符合现实(运行时)的结论?
或者可能是对手不是开发人员?
或者可能是Dart运行时没有遵循语言规范,反对者相信(或者不知道?)这条规则没有得到遵守吗?
我认为null必须具有_Null类型,而不是在源代码中声明,而是在created internally in virtual machine中声明。
在这种情况下,我不能说_Null不是bottom类型,因为它隐藏在虚拟机中。
谁是对的?我还是你?
发布于 2014-01-01 17:17:03
来自spec
空 保留字null表示空对象。 nullLiteral:空 ; 空对象是内置类Null的唯一实例。试图实例化Null会导致运行时错误。类试图扩展或实现Null是编译时错误。调用空方法将产生一个NoSuchMethodError,除非该方法是由类Null显式实现的。 静态类型的null是底部。 使用底部代替Null的决定允许在任何地方都分配null,静态检查器没有抱怨。
底端记录不清,我找不到太多的参考资料。但是,当规范讨论void时,会提到:
底部是所有类型的子类型。
因此,为了回答您的问题,看来Null类型并没有什么神奇之处,但是null文字有魔力;它有一种底部类型,这意味着它是所有类型的子类型。
由于null是Null的唯一实例,所以检查是否为== null而不是is Null更正确,我认为这就是为什么从编辑器那里得到警告的原因。
发布于 2014-01-01 17:15:12
Null是Object的一个子类型,因为Dart是一种动态语言,所以将null (Null的一个实例)赋值给String类型的变量或任何其他类型都是有效的。静态类型检查必须有一个特殊规则,以避免为将null分配给另一个类型的变量而产生错误或警告。
检查s is Null的结果到true,但Dart风格的指南似乎强制s == null的原因未知(也许它更快)。
https://stackoverflow.com/questions/20870712
复制相似问题