2016-04-21 12 views
10

nella documentazione Elixir, che continuare a utilizzare una notazione strana con barra, ad esempio:Che cosa significa la notazione barra in elisir?

is_boolean/1 
IO.puts/1 
String.length/1 
is_function/2 
++/2 

sto solo indovinare, ma penso che si riferisce a arity. Ma se è così, perché il diavolo non è menzionato da qualche parte nei documenti? Non è come se si trattasse di un qualche tipo di convenzione standard in ambito IT (almeno, non uno che abbia mai visto nei miei 20 anni in IT).

risposta

13

Da page 2, Basic types del Introduzione documentazione:

Nota: Le funzioni in Elixir sono identificati per nome e per numero di argomenti (cioè arity). Pertanto, is_boolean/1 identifica una funzione denominata is_boolean che accetta 1 argomento. is_boolean/2 identifica una funzione diversa (inesistente) con lo stesso nome ma diversa funzione.

è anche descritta in Erlang/Elixir Syntax: A Crash Course:

Qui creiamo un modulo denominato hello_module. In esso definiamo tre funzioni, le prime due sono rese disponibili per altri moduli da chiamare tramite la direttiva export in alto. Contiene un elenco di funzioni, ognuna delle quali è scritta nel formato <function name>/<arity>. Arity sta per numero di argomenti.

Potrei ipotizzare che questo tende ad essere relegato a una nota a margine nella letteratura di Elisir perché proviene direttamente da Erlang. Anche se la conoscenza di Erlang non dovrebbe essere necessaria per usare l'elisir, tali omissioni sono un errore comune quando le persone documentano il software derivato come Elixir da Erlang.

3

Hai indovinato che è l'arità della funzione. Il motivo per cui si tratta di un'informazione importante (che spesso non è inclusa in molte lingue) è che funziona con lo stesso nome, ma le diverse funzioni sono funzioni diverse: un esempio è Enum.reduce/2 e Enum.reduce/3. Una funzione in Elixir è identificata da tre elementi: modulo, nome e arity. O uno è diverso e hai una funzione diversa.

La notazione è anche menzionata nella Guida introduttiva: 1, 2.