dart - 在 dart web 项目中,输入和引用警告不应该是错误吗?

标签 dart

在 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/

相关文章:

macos - Flutter MacOS 为 CMD 获取 LogicalKeyboardKey

flutter - 找不到函数 debugPrint()

flutter - 如何在Flutter中进行此UI设计

flutter - 在 ListView 中显示复选框

flutter - DART:如何在单击按钮时随机生成一个六 (6) 位数字以显示在下一页上?

android - 如何在 CircleAvatar 上放置指向菜单的链接?有可能吗?

internationalization - 如何将国际化对象传递给 Flutter 中的子控件

dart - Dart HttpRequest返回 future

local-storage - 使用 Dart 的 Chrome 应用程序中的本地存储

Flutter if 小部件内的语句