gpt4 book ai didi

elixir - 如何区分 Elixir 的 `with` 宏中的错误?

转载 作者:行者123 更新时间:2023-12-02 06:25:11 24 4
gpt4 key购买 nike

我的代码通常使用 with 宏来确保在继续操作之前所有必需的数据都可用,但我希望有更细粒度的错误来准确确定失败的原因。

使用文档中的示例:

with {:ok, width} <- Map.fetch(opts, :width),
{:ok, height} <- Map.fetch(opts, :height) do
{:ok, width * height}
else
:error ->
{:error, :wrong_data}
end

我想知道错误元组中是否缺少宽度高度

我的尝试是使用默认值:

with {:ok, width} <- Map.fetch(opts, :width, {:error, :missing_width}),
{:ok, height} <- Map.fetch(opts, :height, {:error, :missing_height}) do
{:ok, width * height}
else
{:error, reason} = error -> error
end

但这感觉不是特别优雅。有更惯用的方法吗?

最佳答案

您可以将您的 with 行包装在描述性元组上,并仍然对您想要的返回进行断言,这样您就可以辨别/提供错误所在的反馈。

with(
{_, {:ok, width}} <- {:width, Map.fetch(opts, :width)},
{_, {:ok, height}} <- {:height, Map.fetch(opts, :height)}
) do

{:ok, width * height}

else
{what, :error} ->
{:error, {what, :wrong_data}}
end

关于elixir - 如何区分 Elixir 的 `with` 宏中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57359495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com