2014-10-04 7 views

risposta

2

In primo luogo si deve essere consapevoli che Elixir supporta 2 tipi dizionario

  • Erlangs tipo di mappa nativa (per le mappe con solo gli elementi limitato)
    map = %{}
  • elisir proprio tipo di dizionario (dizionari con potenzialmente elevato payload)
    dict = HashDict.new

Entrambi i tipi tuttavia devono essere controllati con Erlangs nativo :erlang.is_map.

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

Maggiori informazioni si possono trovare nelle sezioni 7.2 e 7,3 (http://elixir-lang.org/getting_started/7.html)

+1

HashDict tornerà fedele a: erlang.is_map/1 solo perché è una struct. Ad esempio, se si esegue: si otterrà: erlang.is_map (% URI {}). Anche l'URI è una struttura, ma restituirà true. Se si desidera controllare se è un HashDict si dovrebbe pattern matching su di esso con qualcosa di simile: def some_fun (arg =% HashDict {}), fare: ... Si può vedere di più qui: https: //github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/hash_dict.ex#L40 – Eduardo

+0

Grazie per il chiarimento – robkuz

Problemi correlati