Dart Boolean作为copyWith的可选参数
我试图实现一个复制构造函数/方法,但其中一个参数是Dart Boolean作为copyWith的可选参数,dart,flutter,Dart,Flutter,我试图实现一个复制构造函数/方法,但其中一个参数是布尔值。我环顾四周,有人提到使用?value来确定是否提供了该值,但它没有编译: class Model { final String id; final bool isEnabled; Model.copyFrom(Model data, {String id, bool isEnabled}) : id = id ?? data.id, isEnabled = ?isEnabled ??
布尔值。我环顾四周,有人提到使用?value来确定是否提供了该值,但它没有编译:
class Model {
final String id;
final bool isEnabled;
Model.copyFrom(Model data,
{String id,
bool isEnabled})
: id = id ?? data.id,
isEnabled = ?isEnabled ?? data.isEnabled);
}
如果isEnabled
未随copyFrom
提供,我如何告诉它使用数据中的中的一个。如果未提供该值,则需要保留该值,无论该值为true还是false
?isEnabled
引发语法错误:意外的文本“?”。中
isEnabled = ?isEnabled ?? data.isEnabled
?
已经检查了null
,不需要?
前缀
这应该是你想要的
isEnabled = isEnabled ?? data.isEnabled
没有必要对布尔值进行不同的处理
例如,?
或更好的?。
在
foo?.isEnabled
当foo
为null
时,它不会尝试计算isEnabled
,而是返回null
,因为null
没有isEnabled
获取程序,这将导致异常 为什么不直接使用??=
运算符?“前缀是什么?”它会产生编译错误;-)为什么不直接使用???=运算符?
因为在初始值设定项列表中,第一个isEnabled
引用字段(this.isEnabled
),第二个引用参数。哦,我明白了。没有注意到这一差异。这可能看起来有点奇怪,但初始化列表中的写访问权限只允许用于字段,而读取访问权限仅允许用于参数值,因此没有歧义。来自C#背景的我认为这是我的问题。再仔细研究一下,正确的值就设定好了。