我刚开始学习Dart并在做练习的过程中被困住了。即使它为false,程序也会执行'if'语句。代码如下所示。
void main() {
var x = 'hello';
if (x is int) {
int y = 0;
y = x % 2;
print("Integer");
switch (y) {
case 0:
print("Even");
break;
case 1:
print("Odd");
break;
default:
print("Unknown");
}
}
else if (x is double) {
print("Decimal");
}
else {
print("String");
}
}
控制台中显示的错误是:
错误:未为类'String'定义方法'%'。 尝试将名称更正为现有方法的名称,或定义一个名为“%”的方法。 y = x%2; ^
它适用于任何整数,但不适用于字符串或十进制值。
尽管我这样做,代码对于所有值(整数,字符串和十进制)都可以完美运行。
void main() {
var x = 'hello';
if (x is int) {
print("Integer");
}
else if (x is double) {
print("Decimal");
}
else {
print("String");
}
}
请帮助。 谢谢
答案 0 :(得分:2)
此错误在编译期间发出,而不是在运行时发出。 x is int
永远都不是没关系。这将类似于以下代码:
if (false) {
this is a syntax error
}
,您仍然会期望编译错误。
在这种情况下,Dart编译器已经知道x
的类型为String
(通过类型推断),并且%
尚未在该类型上定义。 (可以说,由于编译器知道条件始终为假,因此它可以忽略整个if
块。您还可以争辩说,更早地报告错误会更好,这就是Dart编译器在这里所做的。)
如果您将x
的类型更改为显式使其为dynamic
或Object
,则代码将被编译,并且您将获得期望的运行时行为。