Dart Map语法:putIfAbsent('FirstKey',()=> 1);什么是: ()?

时间:2014-08-10 09:50:17

标签: dart

在编辑提示中,你得到:

scores.putIfAbsent(key, () => numValue);

我正在使用命令向我的地图添加单个“行”:

myMap.putIfAbsent(9, () => 'Planned');
yourMap.putIfAbsent('foo', () => true);

所以:那个()是什么意思?

3 个答案:

答案 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);

所以这两种形式完全不同。第一个添加一个值,第二个添加一个函数。

当我们假设numValue5被调用时具有值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