如何通过将键的值作为初始值来更新Map中的值?也就是说,我想将字符串值转换为小写,如下所示:
Map.update(m1, "key1", ???, &String.downcase/1)
“???”应该是什么因为它需要初始值?
答案 0 :(得分:2)
由于仅在密钥不存在时才使用该初始值,因此您可以将nil
作为默认值传递,如下所示:
Map.update(m1, "key1", nil, &String.downcase/1)
答案 1 :(得分:0)
如果您需要在地图中没有此类值的情况下优雅地退回代码,请使用Map.get_and_update/3
:
Map.get_and_update(m1, "key1", fn
current_value when is_binary(current_value) ->
{current_value, String.downcase(current_value) }
_ ->
{current_value, "Conversion error: not a string" }
# or raise
# or {current_value, current_value}
end)
这样你就永远不会在某些输入上找到应用程序意外崩溃的原因。
如果你仍然想要走最简单的路径,那么传递一个空字符串而不是nil
会更安全:
Map.update(m1, "key1", "", &String.downcase/1)
后者不会至少抛出,它会默默地在未知键上返回一个空字符串。