我尝试在 Dart 中创建函数列表,但无法使用 List add 方法来实现此目的。这是代码,它们都在同一个文件中。
// bin/filter.dart
import 'package:filter/filter.dart';
import 'package:filter/LogEntry.dart';
void main(List<String> arguments) {
LogEntry log = new LogEntry();
TripListFilter filter = new TripListFilter(true);
for (FilterFunction f in filter.filters) {
print('Filter: ${f(log)}');
}
}
// lib/LogEntry.dart
class LogEntry {
bool trailer = false;
}
// lib/filter.dart
import 'package:filter/LogEntry.dart';
typedef FilterFunction = bool Function(LogEntry a);
class TripListFilter {
TripListFilter(this.trailer);
bool? trailer;
bool _myFunction(LogEntry trip) {
if (trailer == true && trip.trailer) return true;
return false;
}
List<FilterFunction> filters = [];
filters.add(_myFunction);
}
运行这个给我错误
Building package executable...
Failed to build filter:filter:
lib/filter.dart:17:3: Error: The name of a constructor must match the name of the enclosing class.
filters.add(_myFunction);
在带有 Flutter 和 Dart 插件的 Android Studio 中,我在最后一行的
filters
变量上看到一条红线。将鼠标悬停在其上方,我看到一条消息“构造函数的名称必须与封闭类的名称匹配。”
据我所知,“过滤器”列表的定义与 _myFunction 的签名匹配。
为什么功能无法添加到列表中?
问题是这条线
filters.add(_myFunction);
位于函数或构造函数的主体之外,这使其成为声明。您可以将其添加到构造函数中,例如如下所示:
class TripListFilter {
TripListFilter(this.trailer){
filters.add(_myFunction);
}
bool? trailer;
bool _myFunction(LogEntry trip) {
if (trailer == true && trip.trailer) return true;
return false;
}
List<FilterFunction> filters = [];
}