Zuerst ! und ?
Sie sind Namenskonventionen in der Regel am Ende der Funktionsname angewendet und sind nicht keine spezielle Syntax.
! - Wird eine Ausnahme ausgelöst, wenn die Funktion einen Fehler feststellt.
Ein gutes Beispiel ist Enum.fetch! (Es hat auch eine Enum.fetch, die keine Ausnahme auslöst) .Findet das Element am angegebenen Index (nullbasiert). Erhöht OutOfBoundsError, wenn die angegebene Position außerhalb des Bereichs der Auflistung liegt.
? - Wird verwendet, um anzuzeigen, dass die Funktion einen booleschen Wert zurückgibt, entweder wahr oder falsch. Ein gutes Beispiel ist Enum.any?, das true zurückgibt, wenn Funktionen für irgendeinen Wert wahr sind, andernfalls return false
_
- Dies ignoriert ein Argument in der Funktion oder im Mustervergleich. Wenn Sie möchten, können Sie nach dem Unterstrich einen Namen eingeben.Ex - _base
Dies wird häufig am Ende einer Tail rekursive Funktion verwendet. Ein gutes Beispiel ist die Power-Funktion. Wenn Sie eine beliebige Anzahl Basis 0 das Ergebnis es 1 erhöhen wollen, so ist es wirklich egal, welche Basis
defp getPower(_base,0), do: 1
.
ist - verwendet, um jede Funktion innerhalb des Moduls zuzugreifen oder wie Sie eine anonyme Funktion aufrufen vorschlug
Es gibt einen wichtigen Unterschied zwischen Variablen, die mit * dem '_' beginnen (zB '_foobar') und solchen, die * nur aus' _ 'bestehen (zB' def foo (_, _bar) do, _bar end'). Versuche, das '_' zu verwenden, führen zu Kompilierungszeit 'ungebundene Variable' Fehler. Variablen, denen ein Unterstrich vorangestellt ist, "_bar", dienen dazu, Warnungen für nicht verwendete Variablen zu verhindern, und verhindern die Kompilierung nicht. Ihre Verwendung erzeugt nur eine Warnung: "Warnung: Die unterstrichene Variable" _bar "wird nach dem Setzen verwendet.Ein führender Unterstrich zeigt an, dass der Wert der Variablen ignoriert werden sollte ... " – Marc