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