Elixir Language
Prozesse
Suche…
Einen einfachen Prozess starten
Im folgenden Beispiel wird die greet
Funktion im Greeter
Modul in einem separaten Prozess ausgeführt:
defmodule Greeter do def greet do IO.puts "Hello programmer!" end end iex> spawn(Greeter, :greet, []) Hello #PID<0.122.0>
Hier ist #PID<0.122.0>
die Prozesskennung für den erzeugten Prozess.
Nachrichten senden und empfangen
defmodule Processes do
def receiver do
receive do
{:ok, val} ->
IO.puts "Received Value: #{val}"
_ ->
IO.puts "Received something else"
end
end
end
iex(1)> pid = spawn(Processes, :receiver, [])
#PID<0.84.0>
iex(2)> send pid, {:ok, 10}
Received Value: 10
{:ok, 10}
Rekursion und Empfang
Rekursion kann verwendet werden, um mehrere Nachrichten zu empfangen
defmodule Processes do
def receiver do
receive do
{:ok, val} ->
IO.puts "Received Value: #{val}"
_ ->
IO.puts "Received something else"
end
receiver
end
end
iex(1)> pid = spawn Processes, :receiver, []
#PID<0.95.0>
iex(2)> send pid, {:ok, 10}
Received Value: 10
{:ok, 10}
iex(3)> send pid, {:ok, 42}
{:ok, 42}
Received Value: 42
iex(4)> send pid, :random
:random
Received something else
Elixir verwendet eine Rekursionsoptimierung für den Rückruf, solange der Funktionsaufruf das letzte ist, was in der Funktion wie im Beispiel geschieht.
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow