Dart 理解int之间的差异?和int(或num?和num)
定义地图后(以字母为键,以拼字图分数为值)Dart 理解int之间的差异?和int(或num?和num),dart,Dart,定义地图后(以字母为键,以拼字图分数为值) Map letterScore//我省略了声明的其余部分 当我尝试此函数时(在DartPad中) int分数(字符串aWord){ int结果=0; 对于(int i=0;i
Map letterScore//我省略了声明的其余部分
当我尝试此函数时(在DartPad中)
int分数(字符串aWord){
int结果=0;
对于(int i=0;i
无论我是通过将变量声明为num
还是int
来进行实验,我始终会收到错误消息:
错误:“int”类型的值无法分配给类型为的变量
“num”是因为“int”是可为null的,而“num”不是[我是在将所有数值变量声明为int后得到的]
错误:“num”类型的值无法从具有
返回类型“int”
错误:“num”类型的值无法分配给类型为的变量
“num”是因为“num”可为空而“num”不可为空
我理解整数和浮点数(或双精度)之间的区别,我不理解的是int
vsint?
和num
vsnum?
以及声明变量时使用的形式。我应该如何声明和使用int
或num
变量来避免这些错误?举个例子:
int x; // x has value as null
int x = 0; // x is initialized as zero
上面的代码都是很好的可编译代码。但是如果您启用Dart的空安全
功能(您应该启用),则会使上述代码的工作方式有所不同
int x; // compilation error: "The non-nullable variable must be assigned before can be used"
int x = 0; // No Error.
这是编译器所做的一项工作,它在编译期间警告您变量可以为null的任何地方。太棒了
但是,如果因为在编译时不知道值而必须将变量声明为null,会发生什么呢
int? x; // Compiles fine because it's a nullable variable
?
是一种告诉编译器希望此变量允许null
的方法。然而,当你说一个变量可以是空的时,那么每次你使用这个变量时,编译器都会提醒你在使用它之前检查这个变量是否为空
因此,?
的另一种用法是:
int? x;
print(x?.toString() ?? "0");
进一步阅读:
官方文件:
空感知运算符:您的问题是
映射上的[]
运算符返回一个可以为Null
的值。原因是,如果您在映射中请求不存在的内容,它将返回null
。因此,在您的情况下,letterScore
在使用[]
运算符时将返回一个int?
。因此,您需要在那里处理该情况[]
返回null
。或者您可以使用letterScore[aWord[i]]
(请参阅!
符号),这将强制分析器停止抱怨,并且应该只将该值视为不可为空。但是如果[]
返回null
,则会出现运行时异常。
int? x; // Compiles fine because it's a nullable variable
int? x;
print(x?.toString() ?? "0");