Elixir 是否有与Python';什么是长生不老药?

Elixir 是否有与Python';什么是长生不老药?,elixir,Elixir,我希望有一个Elixir映射,其中任何键都有特定类型的默认值。使用或实现类似功能的最佳方法是什么?最简单的方法是使用Map。获取/3如下: iex(1)> map = %{foo: "bar"} %{foo: "bar"} iex(2)> Map.get map, :foo, "baz" "bar" iex(3)> Map.get map, :fiz, "baz" "baz" 如果不希望每次都指定默认值,可以创建“隐藏”默认值的函数: iex(4)> my_get =

我希望有一个Elixir映射,其中任何键都有特定类型的默认值。使用或实现类似功能的最佳方法是什么?

最简单的方法是使用
Map。获取/3
如下:

iex(1)> map = %{foo: "bar"}
%{foo: "bar"}
iex(2)> Map.get map, :foo, "baz"
"bar"
iex(3)> Map.get map, :fiz, "baz"
"baz"
如果不希望每次都指定默认值,可以创建“隐藏”默认值的函数:

iex(4)> my_get = &(Map.get &1, &2, "baz")
#Function<12.90072148/2 in :erl_eval.expr/5>
iex(5)> my_get.(map, :foo)
"bar"
iex(6)> my_get.(map, :fiz)
"baz"

我同意通过包装
map.get/3
,为所有缺少的键创建一个默认值相同的映射;如果只需要一个默认值,那么这是一个非常干净的解决方案。回答得好!感谢您指出,Python
defaultdict
可以为不同的键提供不同的默认值。我更新了我的答案来解决这个问题。
iex(7)> my_get2 = &(Map.get map, &1, "baz")
#Function<6.90072148/1 in :erl_eval.expr/5>
iex(8)> my_get2.(:fiz)
"baz"
iex(9)> my_get2.(:foo)
"bar"
factory = fn (key) -> key end
map_ret_val = fn (nil, key) -> factory.(key)
                 (other, _key) -> other end
my_get3 = fn (map, key) -> map_ret_val.(map[key], key) end