Dart中如何区分类成员和同名全局变量?

问题描述 投票:0回答:1

我正在尝试以下代码:

String user() {
  return "";
}

class Foo {
  String user;
  Foo() : user = user(); // <= error here
}

void main() {}

但由于名称不明确,它不起作用。

我可以将全局变量移至另一个模块并导入

as globals
来避免它。

还有其他办法吗?

dart class global-variables global ambiguous-grammar
1个回答
0
投票

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() ...
© www.soinside.com 2019 - 2024. All rights reserved.