dart - Dart 中这个冒号背后的原因是什么
问题描述
我正在检查一些飞镖代码并查看以下内容:
AppState.fromJson(Map<String, dynamic> json)
: cartItems = (json['cartItems'] as List)
.map((i) => new CartItem.fromJson(i as Map<String, dynamic>))
.toList();
结肠背后的原因是什么?
为什么这与常规任务不同?
解决方案
您可以在飞镖之旅中找到更多信息:https ://dart.dev/guides/language/language-tour#classes
如果超类没有未命名的、无参数的构造函数,那么您必须手动调用超类中的构造函数之一。在冒号 (:) 之后、构造函数主体(如果有)之前指定超类构造函数。
除了调用超类构造函数之外,您还可以在构造函数主体运行之前初始化实例变量。用逗号分隔初始化程序。
// Initializer list sets instance variables before
// the constructor body runs.
Point.fromJson(Map<String, num> json)
: x = json['x'],
y = json['y'] {
print('In Point.fromJson(): ($x, $y)');
}
在开发过程中,您可以在初始化列表中使用 assert 来验证输入。
Point.withAssert(this.x, this.y) : assert(x >= 0) {
print('In Point.withAssert(): ($x, $y)');
}
您还可以使用它们来初始化最终变量:
class Point {
final num x;
final num y;
final num distanceFromOrigin;
Point(x, y)
: x = x,
y = y,
distanceFromOrigin = sqrt(x * x + y * y);
}
推荐阅读
- node.js - bcrypt 不检查密码是否区分大小写
- file - 写入文件?朱莉娅语言
- javascript - Angular 9 ngModel 未清除默认选择
- ios - 如何获取 NSImage 像素的颜色?
- firebase - 在不单击通知的情况下获取 Firebase 推送通知数据 - Xamarin.forms iOS
- visual-studio - 如何在 UI 中更改 nuget 源优先级
- javascript - 异步函数是否被添加到调用堆栈中?
- pandas - 如果有人熟悉 Andrew ng 的具有一层隐藏层的 Planer 数据分类
- python - 如何将`Union [bytes,str]`类型的值传递给采用`AnyStr`的函数
- react-native - 材料底部选项卡上的 ScrollView 不起作用