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