我还是 Elixir 的新手。我正在尝试创建一个接受请求列表并处理每个请求的方法。如果全部通过则返回 {:ok, "success"} 或 {:error, error_reason} 如果失败则返回。
在其他语言中,我可以做这样的事情。假设流程函数返回 {:ok, "success"} 或 {:error, error_reason}。
def func(requests):
for request in requests:
if {:error, error_reason} <- process(request):
return {:error, error_reason}
return {:ok, "success"}
end
Run Code Online (Sandbox Code Playgroud)
在 Elixir 世界中这样做的正确方法是什么?
我会使用递归:
def func([head | tail]) do
case process(head) do
{:error, reason} -> {:error, reason}
{:ok, _} -> func(tail)
end
end
def func([]), do: {:ok, "success"}
Run Code Online (Sandbox Code Playgroud)
循环本质上是命令式的,而 Elixir 本质上是一种函数式语言,因此我认为递归和高阶函数是使用循环的更自然的替代方案。
归档时间: |
|
查看次数: |
120 次 |
最近记录: |