Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 两种地图分配[]和putifabsent之间是否存在差异?_Dart - Fatal编程技术网

Dart 两种地图分配[]和putifabsent之间是否存在差异?

Dart 两种地图分配[]和putifabsent之间是否存在差异?,dart,Dart,定义[]或put(如果不存在)之间是否存在性能或任何其他差异 map["x"] = 123; map.putifabsent("z", ()=> 123); 除了map['x']=123之外,如果键'x'已经在映射中,那么它将覆盖该键的值,而map.putifAbsent('x',()=>123)不会吗 请注意,putifAbsent返回与提供的键对应的值。您可以使用它获取键的值,如果映射中缺少键,则“动态”生成并插入一个值(这就是为什么它的第二个参数是函数,而不是直接值) 我觉得这是该

定义[]或put(如果不存在)之间是否存在性能或任何其他差异

map["x"] = 123;
map.putifabsent("z", ()=> 123);

除了
map['x']=123之外,如果键
'x'
已经在映射中,那么它将覆盖该键的值,而
map.putifAbsent('x',()=>123)
不会吗

请注意,
putifAbsent
返回与提供的键对应的值。您可以使用它获取键的值,如果映射中缺少键,则“动态”生成并插入一个值(这就是为什么它的第二个参数是函数,而不是直接值)


我觉得这是该方法的用例,但是名称
getValuePutIfAbsent
被认为太长。

方法名称的一个可能来源是SmallTalk
at:ifabbsentput:
消息。由于
[]
操作符(SmallTalk的
at:
的Dart版本)不接受可选参数,它必须是一个方法本身。map.putIfAbsent('x',()=>123)
map['x']??=123
一样,对map的影响和表达式的值是相同的。看
putifAbsent
显然早于
??=
。这几乎是相同的,除非映射包含
null
作为值。在这种情况下,
??=
将赋值,因为
map['x']
返回null,但是
putIfAbsent
将不会赋值,因为map将
'x'
作为键。这就是为什么映射不应该将null作为一个值。