两者的不同在于如果没有可以匹配到的子句, with 将失败, 而 case 将抛出一个不匹配 (no-match) 的错误 (CaseClauseError)....do_something_with_result(res2)
{:error, err} -> handle_error(err)
end
{:error, err} -> handle_error(err)
end
尽管只有两个类似的调用操作...如果再添加一个类似的调用操作, 代码将会变得不可读:
case foo() do
{:ok, res} ->
case bar(res) do
{:ok, res2} ->...最后, 运行 do/end 块中的代码”. 这看起来比之前的版本更简洁和可读, 而且它还有另一个很大的优势. 它允许工程师优先关注正常的业务场景....答案是, 将返回第一个不匹配的操作表达式. 简单地说, 如果我们不关心非 ok 的结果, 那么我们也可以留下正常的路径, 把它留给调用者来处理最终结果.