2014-10-04 2 views

ответ

2

Во-первых, вы должны знать, что Эликсир поддерживает 2 типа словарь

  • эрланга родной тип карты (для карт с только ограниченными пунктами)
    map = %{}
  • Эликсиры собственный словарь типа (словари с потенциально большим полезная нагрузка)
    dict = HashDict.new

Оба типа, однако, должна быть проверен с эрлангами родной :erlang.is_map.

def some_fun(arg) when :erlang.is_map(arg) do 
    #do your thing 
end 

Более подробную информацию можно найти в разделах 7.2 и 7.3 (http://elixir-lang.org/getting_started/7.html)

+1

HashDict вернется верным: erlang.is_map/1 просто потому, что это структура. Вы получите правду, например, если вы запустите: erlang.is_map (% URI {}). URI также является структурой, но возвращает true. Если вы хотите проверить, если это HashDict вы должны спичку узор на нем с чем-то вроде этого: Защиту some_fun (Arg =% HashDict {}), сделайте следующее: ... Вы можете увидеть здесь: https: //github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/hash_dict.ex#L40 – Eduardo

+0

Спасибо за разъяснение – robkuz