gpt4 book ai didi

dart - 为什么 Dart 中未初始化的类型变量不实现类型接口(interface)?

转载 作者:行者123 更新时间:2023-12-03 04:52:18 26 4
gpt4 key购买 nike

我开始学习 Dart,并在此处阅读了对其中一些设计选择的评论:https://medium.com/@krossovochkin/dart-language-bad-design-choices-6e35987dc693

最后一点是关于糟糕的类型系统,作者引用了这段代码片段,它打印了 null :

void main() {
String s = null;
if (s is String) {
print("string");
} else if (s is Null) {
print("null");
} else {
print ("none");
}
}
is关键字对我来说是新的,但 Gilad 的“The Dart Programming Language”指出 is检查对象的类实现的接口(interface),而不是对象的实际类。

但是,这对我没有多大帮助,因为我认为变量 sString 的一个实例因此实现 String ,但证据恰恰相反。

我知道在 Dart 中定义对象/变量时不需要该类,因此我开始怀疑将类放在定义中是否只是作为糖而没有什么功能用途。但相反,对象/变量的类完全由它的值决定,因为 Dart 中所有变量的默认值是 null ,那么 String未实现,但 Null是。是这样吗?我是基地吗?也许有人可以帮我解决这个问题。

最佳答案

原因是is检查当前对象本身的接口(interface),而不是对该对象的引用。所以是的,s可以指向 String对象,但也允许指向 null,它是 Null 的一个实例: https://api.dart.dev/stable/2.7.2/dart-core/Null-class.html

由于Null没有实现 String接口(interface),这将返回 false (null is String) .文章中也提到了这一点。

本文试图关注的问题更多是允许您设置 String可变为 null值但 Null未实现 String .

好吧,在 future ,这个问题将通过目前正在开发的不可空类型来解决。实现此功能后,您实际上可以定义变量,您可以确保该值永远不会是null。 .

关于dart - 为什么 Dart 中未初始化的类型变量不实现类型接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61179982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com