2015-09-08 7 views
12

Ich brauche Hilfe in Bezug auf das Verständnis der folgenden Syntaxen in Elixier !, ?, _ und .. Welche Rolle spielt diese Syntax in der Funktion des Elixiers? Zum Beispiel Repo.get!.Was bedeutet "!", "?", "_" Und "." Syntax in Elixir

Ich bin mir nicht sicher, ob sie nur Funktionsname waren oder eine Rolle haben. Obwohl ich weiß . ist für anonyme Funktion aufrufen. Und _ für irgendwelche oder variadic?

Antwort

18

! - Konvention für Funktionen, die bei einem Fehler Ausnahmen auslösen.

? - Konvention für Funktionen, die einen Booleschen Wert

_ zurückkehren - Wird verwendet, um zu ignorieren, ein Argument oder Teil eines Musters Spiel Ausdruck.

. - Wie Sie erwähnt, wird für den Aufruf einer anonymen Funktion verwendet, wird aber auch für den Zugriff auf eine Modulfunktion wie Mod.a(arg) verwendet.

+2

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

11

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

+2

Nur ein Hinweis: Die' getPower'-Funktion kann den Mustervergleich verwenden: 'defp getPower (_base, 0), do: 1' – asymmetric