提问人:Carlos Daniel 提问时间:8/4/2023 更新时间:8/4/2023 访问量:21
在 Dart 中,将“lambda”设置为构造函数的一部分或设置普通类有什么区别
In Dart, what's the difference between setting a `lambda` as part of a constructor or setting a normal class
问:
我在构造类时见过这种东西:
class A {
A(this.attr)
final String Function() attr;
}
main() {
final myStringAttr = 'some-string';
final a = A(()=> myStringAttr);
}
如果我的定义是,上面的工作方式与它的工作方式相同:A class
class A {
A(this.attr);
final String attr;
}
main() {
final myStringAttr = 'some-string';
final a = A(myStringAttr);
}
那么,有什么区别呢?带有 lambda 的构造函数与没有 lambda 的构造函数有什么不同?lambda 的性能是否较差?何时使用 lambda?
答:
0赞
Alexander
8/4/2023
#1
如果字符串的计算成本很高(例如,它插入了计算速度较慢的段,涉及大量处理来格式化事物等),那么 lambda 会推迟对该字符串的评估,直到真正需要它。
对于断言(几乎从未触发过断言,因此消息最常被丢弃)、异常消息等,这种情况很常见。
对于简单的字符串,lambda 的额外/分配实际上会稍微慢一些,但使用它的作者打赌它得到了回报,因为复杂字符串的大量节省。
评论
attr
attr
String