在飞镖中使用 "get Stringify" 和 "get props"
Use of "get Stringify" and "get props" in dart
import 'package:equatable/equatable.dart';
class Point extends Equatable {
const Point(this.x, this.y);
final int x;
final int y;
@override
List<Object?> get props => [x, y];
@override
bool? get stringify => true;
Point operator +(Point other) {
return Point(x + other.x, y + other.y);
}
Point operator *(int other) {
return Point(x * other, y * other);
}
}
void main() {
print(Point(1, 1) == Point(1, 1));
print(Point(2, 1));
}
“Stringify”和“get props”这段代码是做什么的?
假设“如果设置为 true,[toString] 方法将被覆盖以输出此实例的 [props]。”关于 Stringify 的使用。 “此实例的 [props]”是什么意思?
equatable
包的用途描述为:
A Dart package that helps to implement value based equality without needing to explicitly override ==
and hashCode
.
为了实现这个目标,我们可以让我们的 classes 从 Equatable
扩展(或者将 EquatableMixin
与 with
一起使用),然后==
和 hashCode
.
的实施
但是 Equatable
无法在运行时检查对象以确定您的 class 定义了哪些字段。 Equatable
也不需要预编译步骤。此外,您可能不想在确定两个对象相等时比较对象的所有字段。
因此,Equatable
了解您想要比较的字段的方式是使用 props
getter,如果使用 Equatable
,则必须定义它。 getter 然后必须 return 一个对象列表,在确定两个对象是否相等时应该比较这些对象。
在幕后,只要有人在您的对象上调用 ==
或 hashCode
,Equatable
就会调用此 probs
getter。
stringify
getter 的目的是告诉 Equatable
除了 ==
和 hashCode
之外,是否还应该实现 toString()
为您的 class。默认情况下,Dart 中的 toString()
方法只会告诉您对象的类型,例如 Instance of 'Point'
.
如果 stringify
returns true
,则 Equatable
将使用 probs
中的 returned 值来构造自己的 toString()
方法列出了 probs
中每个元素的值(对应于 class 的每个字段)。
如果您已经希望 toString()
列出 class.
的每个字段的值,这只是一项额外的可选服务
import 'package:equatable/equatable.dart';
class Point extends Equatable {
const Point(this.x, this.y);
final int x;
final int y;
@override
List<Object?> get props => [x, y];
@override
bool? get stringify => true;
Point operator +(Point other) {
return Point(x + other.x, y + other.y);
}
Point operator *(int other) {
return Point(x * other, y * other);
}
}
void main() {
print(Point(1, 1) == Point(1, 1));
print(Point(2, 1));
}
“Stringify”和“get props”这段代码是做什么的? 假设“如果设置为 true,[toString] 方法将被覆盖以输出此实例的 [props]。”关于 Stringify 的使用。 “此实例的 [props]”是什么意思?
equatable
包的用途描述为:
A Dart package that helps to implement value based equality without needing to explicitly override
==
andhashCode
.
为了实现这个目标,我们可以让我们的 classes 从 Equatable
扩展(或者将 EquatableMixin
与 with
一起使用),然后==
和 hashCode
.
但是 Equatable
无法在运行时检查对象以确定您的 class 定义了哪些字段。 Equatable
也不需要预编译步骤。此外,您可能不想在确定两个对象相等时比较对象的所有字段。
因此,Equatable
了解您想要比较的字段的方式是使用 props
getter,如果使用 Equatable
,则必须定义它。 getter 然后必须 return 一个对象列表,在确定两个对象是否相等时应该比较这些对象。
在幕后,只要有人在您的对象上调用 ==
或 hashCode
,Equatable
就会调用此 probs
getter。
stringify
getter 的目的是告诉 Equatable
除了 ==
和 hashCode
之外,是否还应该实现 toString()
为您的 class。默认情况下,Dart 中的 toString()
方法只会告诉您对象的类型,例如 Instance of 'Point'
.
如果 stringify
returns true
,则 Equatable
将使用 probs
中的 returned 值来构造自己的 toString()
方法列出了 probs
中每个元素的值(对应于 class 的每个字段)。
如果您已经希望 toString()
列出 class.