Elixir Language
Processus
Recherche…
Créer un processus simple
Dans l'exemple suivant, la greet fonction à l' intérieur Greeter module est exécuté dans un processus séparé:
defmodule Greeter do
def greet do
IO.puts "Hello programmer!"
end
end
iex> spawn(Greeter, :greet, [])
Hello
#PID<0.122.0>
Ici, #PID<0.122.0> est l' identificateur de processus du processus généré.
Envoi et réception de messages
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}
Récursivité et réception
La récursivité peut être utilisée pour recevoir plusieurs messages
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 utilisera une optimisation de la récursion d'appel tant que l'appel de fonction est la dernière chose qui se produit dans la fonction, comme dans l'exemple.
Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow