在编辑提示中,你得到:
scores.putIfAbsent(key, () => numValue);
我正在使用命令向我的地图添加单个“行”:
myMap.putIfAbsent(9, () => 'Planned');
yourMap.putIfAbsent('foo', () => true);
所以:那个()是什么意思?
答案 0 :(得分:5)
putIfAbsent
函数接受两个参数,键和一个将返回新值的函数(如果需要)。
请参阅https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart-core.Map#id_putIfAbsent
第二个参数是一个返回新值的函数,而不是值本身的原因是,如果映射已经包含了键,那么创建值有时是不可取的。
考虑以下示例:
var map = ...;
var key = ...;
map.putIfAbsent(key, new Value());
如果map
已包含key
,则根本不使用新的值对象。如果Value对象分配对象有些沉重或昂贵,这是一个不必要的副作用。
取代功能
var map = ...;
var key = ...;
map.putIfAbsent(key, () => new Value());
如果key
中不存在map
,则只会执行该功能,并且需要该值。
所以,回答语法问题。 () => ...
形式的表达式是函数表达式的简写,返回第一个表达式的结果。一个小例子:
var function = () => "some string";
var str = function();
print(str);
将打印"某些字符串"。
答案 1 :(得分:0)
()表示表达式没有任何输入参数。
答案 2 :(得分:0)
()
不能单独在这里找到它的() =>
。
// adds the value of numValue
scores.putIfAbsent(key, numValue);
// adds an (anonymous) function that takes 0 arguments and returns the value of numValue.
scores.putIfAbsent(key, () => numValue);
所以这两种形式完全不同。第一个添加一个值,第二个添加一个函数。
当我们假设numValue
在5
被调用时具有值putIfAbsent
,那么在第一种情况下
var x = scores[key];
// here var x has the value 5
在第二种情况下
var x = scores[key];
// here var x references a function
var y = x();
// calling the function executes its body which is `return numValue` (the `return` is implicit in the shorthand function form)
// here var y has the value 5