2015-09-08 16 views
12

Ho bisogno di aiuto per quanto riguarda la comprensione delle seguenti sintassi in elisir !, ?, _ e .. Qual è il ruolo di queste sintassi nella funzione di elixir? Ad esempio Repo.get!.Qual è il significato di "!", "?", "_" E "." sintassi in elisir

Non sono sicuro se fossero solo il nome della funzione o un ruolo. Anche se so che . è per chiamare la funzione anonima. E _ per qualsiasi o variadic?

risposta

18

! - Convenzione per le funzioni che generano eccezioni in caso di errore.

? - Convenzione per le funzioni che restituiscono un valore booleano

_ - Utilizzato per ignorare un argomento o una parte di un'espressione pattern match.

. - Come accennato, viene utilizzato per chiamare una funzione anonima, ma viene anche utilizzato per accedere a una funzione modulo come Mod.a(arg).

+2

Esiste una differenza importante tra le variabili che * iniziano con * il '_' (come' _foobar') e quelle che * consistono solo * di '_' (come ad esempio' def foo (_, _bar) do, _bar end'). Tenta di utilizzare il risultato '_' in errori di variabile non associata 'time di compilazione'. Le variabili precedute da un carattere di sottolineatura, '_bar', servono a prevenire avvertimenti per le variabili non utilizzate e non impediscono la compilazione. Il loro uso genera solo un avvertimento: "attenzione: la variabile sottolineata" _bar "viene utilizzata dopo essere stata impostata.Un underscore principale indica che il valore della variabile deve essere ignorato ... " – Marc

11

In primo luogo ! e ?

Si tratta di convenzioni di denominazione in genere applicate alla fine del nome della funzione e sono non qualsiasi sintassi speciale.

! - Solleva un'eccezione se la funzione rileva un errore.

Un buon esempio è Enum.fetch! (Ha anche lo stesso Enum.fetch che non genera un'eccezione). Trova l'elemento all'indice indicato (a base zero). Genera OutOfBoundsError se la posizione data non rientra nell'intervallo della raccolta.

? - Usato per mostrare che la funzione restituirà un valore booleano, vero o falso. Un buon esempio è Enum.any? che restituisce true se le funzioni sono vere per qualsiasi valore, altrimenti restituisce false

_ - Questo ignorerà un argomento nella funzione o nella corrispondenza del modello. Se ti piace, puoi dare un nome dopo underscore.Ex - _base

Questo è comunemente usato nella fine di una funzione ricorsiva della coda. Un buon esempio è la funzione di potenza. Se si desidera aumentare qualsiasi base numerica a 0 il risultato è 1, in modo che davvero non importa ciò che di base è

defp getPower(_base,0), do: 1 

. - Utilizzato per accedere a qualsiasi funzione all'interno del modulo o come lei ha suggerito di chiamare una funzione anonima

+2

Solo una nota: la funzione' getPower' può fare uso della corrispondenza del modello: 'defp getPower (_base, 0), do: 1' – asymmetric

Problemi correlati