如何在 Dart 中调用与变量同名的顶级函数?

Ant*_*kyi 7 dart

简化代码示例:

int value() => 1;
main() {
  int value = value(); // Error here: 'value' isn't a function 
}
Run Code Online (Sandbox Code Playgroud)

有没有办法指定我要调用一个函数?

如果不是,为什么不可能?

Gün*_*uer 6

您可以使用导入前缀

import 'this_file.dart' as foo;

int value() => 1;
main() {
  int value = foo.value(); // Error here: 'value' isn't a function 
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个聪明的解决方法。另一种方法是添加一个私有转发器:`int _value() => value();` 在顶层并调用它。Dart 范围规则总是选择最接近的封闭声明,并且它隐藏所有其他具有相同名称的声明。例如,您可以编写“this.foo()”,对于静态方法,您可以编写“ClassName.foo()”,但是对于顶级方法,您无法编写简单的东西,没有范围覆盖可以选择顶级范围,除了此处显示的巧妙导入,但在同一个库中,您可以根据需要添加转发器。 (3认同)