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
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