Elixier - Verhalten
Verhaltensweisen in Elixir (und Erlang) sind eine Möglichkeit, den generischen Teil einer Komponente (die zum Verhaltensmodul wird) von dem spezifischen Teil (der zum Rückrufmodul wird) zu trennen und zu abstrahieren. Verhaltensweisen bieten einen Weg zu -
- Definieren Sie eine Reihe von Funktionen, die von einem Modul implementiert werden müssen.
- Stellen Sie sicher, dass ein Modul alle Funktionen in diesem Satz implementiert.
Wenn Sie müssen, können Sie sich Verhaltensweisen wie Schnittstellen in objektorientierten Sprachen wie Java vorstellen: eine Reihe von Funktionssignaturen, die ein Modul implementieren muss.
Verhalten definieren
Betrachten wir ein Beispiel, um unser eigenes Verhalten zu erstellen, und verwenden Sie dann dieses generische Verhalten, um ein Modul zu erstellen. Wir werden ein Verhalten definieren, das Menschen in verschiedenen Sprachen begrüßt und verabschiedet.
defmodule GreetBehaviour do
@callback say_hello(name :: string) :: nil
@callback say_bye(name :: string) :: nil
end
Das @callbackDie Direktive wird verwendet, um die Funktionen aufzulisten, die durch die Übernahme von Modulen definiert werden müssen. Es gibt auch die Nr. An. von Argumenten, ihrem Typ und ihren Rückgabewerten.
Ein Verhalten annehmen
Wir haben erfolgreich ein Verhalten definiert. Jetzt werden wir es in mehreren Modulen übernehmen und implementieren. Lassen Sie uns zwei Module erstellen, die dieses Verhalten auf Englisch und Spanisch implementieren.
defmodule GreetBehaviour do
@callback say_hello(name :: string) :: nil
@callback say_bye(name :: string) :: nil
end
defmodule EnglishGreet do
@behaviour GreetBehaviour
def say_hello(name), do: IO.puts("Hello " <> name)
def say_bye(name), do: IO.puts("Goodbye, " <> name)
end
defmodule SpanishGreet do
@behaviour GreetBehaviour
def say_hello(name), do: IO.puts("Hola " <> name)
def say_bye(name), do: IO.puts("Adios " <> name)
end
EnglishGreet.say_hello("Ayush")
EnglishGreet.say_bye("Ayush")
SpanishGreet.say_hello("Ayush")
SpanishGreet.say_bye("Ayush")
Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:
Hello Ayush
Goodbye, Ayush
Hola Ayush
Adios Ayush
Wie Sie bereits gesehen haben, übernehmen wir ein Verhalten mit dem @behaviourDirektive im Modul. Wir müssen alle im Verhalten implementierten Funktionen für alle untergeordneten Module definieren. Dies kann ungefähr als äquivalent zu Schnittstellen in OOP-Sprachen angesehen werden.