Dart-即使条件为false也会执行if语句

时间:2020-04-10 04:57:05

标签: dart

我刚开始学习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");
 }
}

请帮助。 谢谢

1 个答案:

答案 0 :(得分:2)

此错误在编译期间发出,而不是在运行时发出。 x is int永远都不是没关系。这将类似于以下代码:

if (false) {
  this is a syntax error
}

,您仍然会期望编译错误。

在这种情况下,Dart编译器已经知道x的类型为String(通过类型推断),并且%尚未在该类型上定义。 (可以说,由于编译器知道条件始终为假,因此它可以忽略整个if块。您还可以争辩说,更早地报告错误会更好,这就是Dart编译器在这里所​​做的。)

如果您将x的类型更改为显式使其为dynamicObject,则代码将被编译,并且您将获得期望的运行时行为。