在 dart 中,开发 Web 应用程序时,如果我调用参数数量错误的方法,编辑器会显示一条警告消息,但 javascript 编译会成功运行,并且仅在运行时引发错误。例如,如果我引用不存在的变量,或者传递错误类型的方法参数,情况也是如此。
我问,如果编辑器已经知道不行了,为什么还能编译成功呢?如果编译时没有检查类型,为什么还要有类型呢?我猜这种行为是有原因的,但我找不到任何解释。
最佳答案
在 Dart 中,许多编程错误都是警告。 这有两个原因。
主要原因是它允许您在开发程序时运行程序。如果您的某些代码尚未完成,或者仅重构了一半并且仍然使用旧的变量名称,您仍然可以测试另一半。如果在程序完善之前不允许您运行该程序,那是不可能的。
另一个原因是警告仅代表静态类型检查,它并不了解程序的所有信息,可能你的程序会工作,只是分析器无法确定。
示例:
class C {
int foo(int x) => x;
}
class D implements C {
num foo(num x, [num defaultValue]) => x == null ? defaultValue : x;
}
void bar(C c) => print(c.foo(4.1, 42)); // Static warning: wrong argument count, bad type.
main() { bar(new D()); } // Program runs fine.
如果你的程序能运行,它不应该被一个只知道一半真相的迂腐的分析器阻止。您仍然应该查看警告,并考虑是否有什么需要担心的,但确定您实际上比编译器更了解是完全可以的。
关于dart - 在 dart web 项目中,输入和引用警告不应该是错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24452722/