Elixir Language
Processi
Ricerca…
Generare un processo semplice
Nell'esempio seguente, la funzione di greet
all'interno del modulo Greeter
viene eseguita in un processo separato:
defmodule Greeter do def greet do IO.puts "Hello programmer!" end end iex> spawn(Greeter, :greet, []) Hello #PID<0.122.0>
Qui #PID<0.122.0>
è l' identificatore di processo per il processo generato.
Invio e ricezione di messaggi
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}
Ricorsione e ricezione
La ricorsione può essere utilizzata per ricevere più messaggi
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 utilizzerà un'ottimizzazione della ricorsione in coda, purché la chiamata alla funzione sia l'ultima cosa che accade nella funzione come nell'esempio.
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow