di lasciare che il doc qui:
La variabile anonimo è indicata con sottolineatura (_
) e può essere utilizzato quando è richiesta una variabile ma il suo valore può essere ignorato. [...]
variabili che iniziano con sottolineatura (_
), ad esempio _Height
, sono variabili normali, non anonima: sono tuttavia ignorati dal compilatore nel senso che non genereranno eventuali avvisi per le variabili non utilizzate .
In altre parole, si utilizza _Var
forma quando è necessario l'espressione abbinato da abbinare - ma non vogliono usarlo ulteriormente E/o se si vuole mostrare il suo significato. E tu usi la variabile _
quando né tu né il compilatore dovresti preoccuparti dell'espressione che verrà abbinata.
Esempio 1:
member(_, []) -> [].
In questa funzione non è del tutto chiaro che cosa le prime _
partite. Ma riscrittura direttamente, in questo modo:
member(Elem, []) -> [].
... genererà un avvertimento, se il codice viene compilato con il flag warn_unused_vars
set. È comunque possibile effettuare si codice leggibile qui, però, utilizzando variabile sottolineata:
member(_Elem, []) -> [].
Esempio 2:
{_, _, Some} = {1, 2, 3}
Questa tuple andrà comunque tutto bene, come i primi due elementi la tupla verrà ignorata completamente.
{_Var, _Var, Some} = {1, 2, 3}
Questa corrispondenza non riuscirà, però: anche se _Var
non dovrà essere utilizzato, deve essere 'riempito' con lo stesso valore! Poiché 1 non è uguale a 2, la condizione non riesce qui.
Grazie! Questa era una risposta attraverso. :-) – coffeMug