飞镖名称冲突解决

时间:2020-09-21 19:52:45

标签: dart

我在Dart中有一个看起来像这样的文件:

library myLibrary;

bool myFunction(String s) => s == null;

extension StringExtensions on String {
  bool get myFunction=> myFunction(this);
}

我基本上想在其中扩展具有相同名称的现有功能。

Dart编译器对此有所抱怨,因为它无法看到外部myFunction()的名称,而只能看到StringExtensions内部的吸气剂。

我是否可以从myFunction内部引用外部StringExtensions?还是我可以通过使用别名将它们分成两个不同的文件/库来实现此目的?

2 个答案:

答案 0 :(得分:3)

您可以创建对该函数的私有引用,并在扩展中使用它:

final _myFunction = myFunction;
extension StringExtensions on String {
  bool get myFunction => _myFunction(this);
}

为了避免创建私有引用的开销,您可以为扩展名创建一个新文件,并使用别名导入myLibrary

import 'package:myLibrary/myLibrary.dart' as myLibray;

extension StringExtensions on String {
  bool get myFunction => myLibrary.myFunction(this);
}

...

答案 1 :(得分:0)

我们可以使用别名导入文件本身:

library myLibrary;

// file: my_library.dart
import "my_library.dart" as prefix;

bool myFunction(String s) => s == null;

extension StringExtensions on String {
  bool get myFunction=> prefix.myFunction(this);
}

here所示。