Elixir Language
Processen
Zoeken…
Een eenvoudig proces voortbrengen
In het volgende voorbeeld wordt de greet
in de Greeter
module in een afzonderlijk proces uitgevoerd:
defmodule Greeter do def greet do IO.puts "Hello programmer!" end end iex> spawn(Greeter, :greet, []) Hello #PID<0.122.0>
Hier is #PID<0.122.0>
de proces-ID voor het spawn-proces.
Berichten verzenden en ontvangen
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}
Herhaling en ontvangst
Recursie kan worden gebruikt om meerdere berichten te ontvangen
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 zal een recursie-optimalisatie via de staart gebruiken, zolang de functieaanroep het laatste is dat in de functie gebeurt zoals in het voorbeeld.
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow