#TIL #elixirlang 패턴 매칭으로 map의 value 가져오기
defp ask_and_schedule(producers, from) do
case producers do
%{^from => {pending, interval}} ->
# ...
%{} ->
# ...
end
end
GenStage 코드를 보다가 발견했다. Map.get(producers, from)
혹은 producers[from]
으로 값을 가져오는 게 아니라 패턴 매칭을 사용한다.
Map.get/3 함수보다 빠를까?
defmodule Map do
def get(map, key, default \\ nil) do
case map do
%{^key => value} ->
value
%{} ->
default
other ->
:erlang.error({:badmap, other}, [map, key, default])
end
end
end
당연. 빠를 수밖에 없다. Map.get/3
함수를 패턴 매칭으로 구현했다. 패턴 매칭이 더 근본이다. 하지만 크게 의미있는 속도 차이는 없으니 가독성을 보고 선택하면 된다.