Pattern match function against empty map

后端 未结 3 1198
执笔经年
执笔经年 2020-12-16 08:49

I\'m playing around with pattern match and I found out, that it\'s not quite easy to pattern match parameters of a method against an empty map. I thought it would go somethi

3条回答
  •  孤城傲影
    2020-12-16 09:23

    It works this way by design, but admittedly it can be a bit confusing at first glance. This feature allows you to destructure maps using pattern matching, without having to specify all keys. For example:

    iex> %{b: value} = %{a: 1, b: 2, c: 3}
    %{a: 1, b: 2, c: 3}
    
    iex> value
    2
    

    Consequently, %{} will match any map. If you want to match an empty map in a function, you have to use a guard clause:

    defmodule PatternMatch do
      def modify(map) when map == %{} do
        %{}
      end
    
      def modify(map) do
        # ...
      end
    end
    

提交回复
热议问题