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

hei*_*lap 3 dart

在编辑器提示中你会得到:

scores.putIfAbsent(key, () => numValue);
Run Code Online (Sandbox Code Playgroud)

我使用命令向我的地图添加单个"行":

myMap.putIfAbsent(9, () => 'Planned');
yourMap.putIfAbsent('foo', () => true);
Run Code Online (Sandbox Code Playgroud)

那么:那是什么意思?

And*_*sen 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());
Run Code Online (Sandbox Code Playgroud)

如果map已包含key,则根本不使用新的值对象.如果Value对象分配对象有些沉重或昂贵,这是一个不必要的副作用.

通过取代功能

var map = ...;
var key = ...;
map.putIfAbsent(key, () => new Value());
Run Code Online (Sandbox Code Playgroud)

它只会在key不存在的情况下执行该函数map,并且需要该值.

所以,回答语法问题.表单的表达式() => ...是函数表达式的简写,返回第一个表达式的结果.一个小例子:

var function = () => "some string";
var str = function();
print(str);
Run Code Online (Sandbox Code Playgroud)

将打印"一些字符串".