我正在尝试以下代码:
String user() {
return "";
}
class Foo {
String user;
Foo() : user = user(); // <= error here
}
void main() {}
但由于名称不明确,它不起作用。
我可以将全局变量移至另一个模块并导入
as globals
来避免它。
还有其他办法吗?
Dart 词法查找用于赋予普通标识符含义,在包含具有该名称的成员的第一个范围级别停止。
您需要提供一种使用其他名称或前缀来访问外部名称的方法。
另一个名称是更简单的方法:
String user() {
return "";
}
String _user() => user(); // Add redirect with other name
// or `const _user = user;` to create a tear-off.
class Foo {
String user;
Foo() : user = _user(); // <= No error now
}
void main() {}
为顶级名称添加前缀稍微困难一些。如果是导入的名称,还要导入带有前缀的相同库:
import "other.dart"; // provides `user`
import "other.dart" as other; // access also as `other.user`
如果该成员在 same 库中声明,则解决方案是相同的:使用前缀导入库。对当前库执行此操作感觉有点奇怪,但它非常好且有效的 Dart。
library my_library;
import "my_library.dart" as self;
String user() => ...
// ...
...: user = self.user() ...