为什么`if(var = null)`在dart中编译?

Rém*_*let 4 dart

我最近遇到了这个问题,如何解决Flutter中的“断言失败:布尔表达式不能为null”异常

问题出在哪里,应该是被视为有效的无效代码。

这段代码可以总结为:

int stuff;
if (stuff = null) { // = instead of ==
}
Run Code Online (Sandbox Code Playgroud)

但是为什么要编译此代码?如下将不会。

int stuff;
if (stuff = 42) {
}
Run Code Online (Sandbox Code Playgroud)

伴随以下编译错误:

条件必须具有静态的“布尔”类型。

因此,我可能会出于一致性考虑if (stuff = null)而产生相同的错误。

Gün*_*uer 6

nullboolDart中变量的有效值,至少直到Dart支持非空类型。

bool foo = null;
Run Code Online (Sandbox Code Playgroud)

要不就

bool foo;
Run Code Online (Sandbox Code Playgroud)

已验证。

因此,从静态分析的角度来看,第一种情况没有错。

在第二种情况下,int由于赋值而推断出类型,已知该赋值不是有效的布尔值。

bool foo = 42; 
Run Code Online (Sandbox Code Playgroud)

是无效的。