less than 1 minute read

def put_new(map, key, value) do
  case map do
    %{^key => _value} ->
      map

    %{} ->
      put(map, key, value)

    other ->
      :erlang.error({:badmap, other})
  end
end

#elixirlang 함수 이름이 _new 로 끝나면 뭐다? 글을 쓰면서 Map.put_new/3 구현을 봤다. key를 찾고 key가 있으면 map 리턴. 없다면 추가한 map 리턴. 이런 구현을 예상했다.

예상한 것과 다른 구현이다. %{^key => value} -> 처럼 map의 key, value로 패턴 매칭이 가능한 걸 배웠다.

링크