【发布时间】:2015-10-19 15:37:52
【问题描述】:
我有两个函数,我想运行step_1,然后只在step_1 没问题的情况下运行step_2。构造此代码的最实用的惯用方式是什么?嵌套case 语句看起来很丑,但我不知道除了if 之外还能怎么做,这更糟。
defmodule Test do
def step_1 do
IO.puts "Step 1"
:error
end
def step_2 do
IO.puts "Step 2"
:ok
end
def do_something_case do
case step_1 do
:ok ->
case step_2 do
:ok -> {:ok}
:error -> {:error, :step_2}
end
:error -> {:error, :step_1}
end
end
def do_something_if do
r1 = step_1
if r1 == :ok
r2 = step_2
if r2 == :ok
:ok
else
{:error, :step_2}
end
else
{:error, :step_1}
end
end
end
【问题讨论】:
-
您可能还想看看这篇博文以获得更多想法:zohaib.me/railway-programming-pattern-in-elixir
-
对此的提案现已在邮件列表中。如果/何时实施,我会更新我的答案 - gist.github.com/josevalim/8130b19eb62706e1ab37
标签: functional-programming elixir