Dart名称冲突解决方案



我在Dart中有一个文件,如下所示:

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

我基本上想用相同的名称为以前的现有函数添加扩展。

Dart编译器抱怨这一点,因为它看不到外部myFunction()名称,只看到StringExtensions内部的getter。

有没有办法让我从StringExtensions内部引用外部myFunction?或者我可以通过使用别名将它们分隔在两个不同的文件/库中来实现这一点吗?

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

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);
}
...

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

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);
}

如图所示。

最新更新