Dart 两种地图分配[]和putifabsent之间是否存在差异?
定义[]或put(如果不存在)之间是否存在性能或任何其他差异Dart 两种地图分配[]和putifabsent之间是否存在差异?,dart,Dart,定义[]或put(如果不存在)之间是否存在性能或任何其他差异 map["x"] = 123; map.putifabsent("z", ()=> 123); 除了map['x']=123之外,如果键'x'已经在映射中,那么它将覆盖该键的值,而map.putifAbsent('x',()=>123)不会吗 请注意,putifAbsent返回与提供的键对应的值。您可以使用它获取键的值,如果映射中缺少键,则“动态”生成并插入一个值(这就是为什么它的第二个参数是函数,而不是直接值) 我觉得这是该
map["x"] = 123;
map.putifabsent("z", ()=> 123);
除了
map['x']=123之外,如果键'x'
已经在映射中,那么它将覆盖该键的值,而map.putifAbsent('x',()=>123)
不会吗
请注意,putifAbsent
返回与提供的键对应的值。您可以使用它获取键的值,如果映射中缺少键,则“动态”生成并插入一个值(这就是为什么它的第二个参数是函数,而不是直接值)
我觉得这是该方法的用例,但是名称getValuePutIfAbsent
被认为太长。方法名称的一个可能来源是SmallTalkat:ifabbsentput:
消息。由于[]
操作符(SmallTalk的at:
的Dart版本)不接受可选参数,它必须是一个方法本身。map.putIfAbsent('x',()=>123)
与map['x']??=123
一样,对map的影响和表达式的值是相同的。看putifAbsent
显然早于??=
。这几乎是相同的,除非映射包含null
作为值。在这种情况下,??=
将赋值,因为map['x']
返回null,但是putIfAbsent
将不会赋值,因为map将'x'
作为键。这就是为什么映射不应该将null作为一个值。