Elixir递归和接收
示例
递归可用于接收多条消息
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将使用尾部调用递归优化,只要函数调用是函数中最后发生的事情(如示例中所示)。