我有像这样的tre函数
check_file(url) |>test |> foo
check_file return
{:ok,_} or {:error,_}
我有两个模式匹配功能
def test({:ok,_}) do
IO.puts "ok";
end
def test({:error,_}) do
IO.puts "KO, debug and stop!";
end
如果我得到:错误我不想调用我的上一个函数(foo)但是我想在Debug中显示错误
我可以这样做吗?
答案 0 :(得分:1)
您可以像elixir一样使用react-native-rename语句
with {:ok, file} <- check_file(url) do
file |> foo |> foo
else
IO.puts "KO, debug and stop!"
end
如果test
也返回
{:ok, something}
元组,则此功能尤其有用。然后,您可以展开with
如果您只能在check_file(url)
方法的开头出现错误,可以执行以下简单的解决方案:
def test({:ok,file}) do
IO.puts "ok";
do_your_stuff_with_the_file()t |> foo
end
def test({:error,_}) do
IO.puts "KO, debug and stop!";
end
答案 1 :(得分:0)
只需使用简单的案例:
case check_file(url) do
{:ok, file} ->
IO.puts "ok"
foo(file)
{:error, _} ->
IO.puts "KO, debug and stop!"
end
答案 2 :(得分:0)
可能最简单的方法是将{:error, _}
模式的支持添加到函数foo
:
def foo({:ok,_}) do
IO.puts "do the stuff";
end
def foo({:error,_}), do: {:error, []}
但是在这种解决方案中,您需要从{:error}
返回test
。
答案 3 :(得分:0)
其他答案中没有提到的是,您可以在test
函数中引发一些特定错误,然后在管道中的任何代码包装中捕获它。只有这样你才能真正阻止任意长管道。
但我不会这样做。我宁愿用我不需要通过引发错误来阻止管道来编写我的程序。