, error(2), ok(3)], do: x
#=> [1, 3]
with则直接作用在函数上,然后根据模式匹配分别处理正确场景与错误场景:
with {:ok, x} 1),...{:ok, y} 2),do: {:ok, x + y}#{:ok, 3}
with {:ok, x} 1),
{:ok, y} 2),do: {:...ok, x + y}#{:error, 1}
当error(2)无法匹配{:ok, y}时,with/1的表达式链条就会及时终止,并返回产生匹配错误的值。...,例如返回一个nil,当代码执行到send_response/2时,就可能抛出ArgumentError。...error -> error
end
倘若遵循这样一个编码规范,每个函数并不需要检查输入参数是否是error,而是统一放到with/1的else中进行处理,可以省去冗余的错误处理代码。