【发布时间】:2015-12-03 12:25:55
【问题描述】:
我是 Elixir 的新手,我正在尝试编写一个 GenServer,它将键、值对存储在 HashDict 中。存储复合键和值很好。这是代码:
#Initialise the HashDict GenServer.start_link
def init(:ok) do
{:ok, HashDict.new}
end
#Implement the server call back for GenServer.cast
def handle_cast({:add, event}, dict) do
{foo, bar, baz, qux} = event
key = %{key1: foo, key2: bar}
value = %{val1: baz, val2: qux}
{:noreply, HashDict.put(dict, key, value) }
end
一切都好。但是我无法实现我想要的 handle_call 行为。所以在这里我想:
- 对于给定的
key1值,检索HashDict中所有对应的value条目。这意味着忽略key2的值(有点像全选)。 - 返回所有
val2s 后,将它们全部相加(假设它们是整数,忽略val1)得出总和。
所以我已经走到了这一步:
def handle_call({:get, getKey}, _from, dict) do
key = %{key1: getKey, key2: _}
{:reply, HashDict.fetch(dict, key), dict}
end
这不起作用,因为无法在 _ 上进行模式匹配。大概我会在地图上使用某种Enumeration 来实现我的第二个目标:
Enum.map(mymap, fn {k, v} -> v end)|> Enum.sum{}
但我似乎无法完全破解语法来实现我的两个目标。感谢您的帮助!
【问题讨论】:
标签: dictionary enums elixir