是否可以在飞镖中使用 getter 作为函数参数?
Is it possible to use a getter as function parameter in dart?
我有一个像这样的重复函数:
repetitiveFunction(Type type) async* {
yield* _recordCollectionQuery(type)
.snapshots()
.map((snapshot) {
final List<Record> records = snapshot.docs
.map((doc) => RecordDto.fromFirestore(doc).toDomain())
.toList();
// Here instead of using "record1.number", I want to use parameter like "record1.param"
records.sort((record1, record2) => record2.number.compareTo(record1.number));
return records;
});
}
这里Record
class是freezed
数据class。我不得不多次使用这个函数只是改变 record.number
,这里 number
是 Record
class 的 getter。那我可以用这个getter作为函数参数吗?
你不能直接使用getters/setters作为函数,因为getters/setters的意义在于与成员变量没有区别。
您可以轻松地将 getter 包装在匿名函数中(例如 (record) => record.number)
,然后您可以为不同的 getter 提供不同的匿名函数:
这是一个具体的例子:
Stream<List<Record>> repetitiveFunction(
List<Record> records,
Comparable Function(Record) getComparableProperty,
) async* {
yield* _recordCollectionQuery(type).snapshots().map((snapshot) {
final List<Record> records = snapshot.docs
.map((doc) => RecordDto.fromFirestore(doc).toDomain())
.toList();
records.sort((record1, record2) => getComparableProperty(record2)
.compareTo(getComparableProperty(record1)));
return records;
});
}
我有一个像这样的重复函数:
repetitiveFunction(Type type) async* {
yield* _recordCollectionQuery(type)
.snapshots()
.map((snapshot) {
final List<Record> records = snapshot.docs
.map((doc) => RecordDto.fromFirestore(doc).toDomain())
.toList();
// Here instead of using "record1.number", I want to use parameter like "record1.param"
records.sort((record1, record2) => record2.number.compareTo(record1.number));
return records;
});
}
这里Record
class是freezed
数据class。我不得不多次使用这个函数只是改变 record.number
,这里 number
是 Record
class 的 getter。那我可以用这个getter作为函数参数吗?
你不能直接使用getters/setters作为函数,因为getters/setters的意义在于与成员变量没有区别。
您可以轻松地将 getter 包装在匿名函数中(例如 (record) => record.number)
,然后您可以为不同的 getter 提供不同的匿名函数:
这是一个具体的例子:
Stream<List<Record>> repetitiveFunction(
List<Record> records,
Comparable Function(Record) getComparableProperty,
) async* {
yield* _recordCollectionQuery(type).snapshots().map((snapshot) {
final List<Record> records = snapshot.docs
.map((doc) => RecordDto.fromFirestore(doc).toDomain())
.toList();
records.sort((record1, record2) => getComparableProperty(record2)
.compareTo(getComparableProperty(record1)));
return records;
});
}