在“with”中使用“else”作为快乐路径是惯用的吗?

问题描述 投票:0回答:1

我们的代码库包含将值转换为特定数据类型的现有函数。我试图利用这些函数将未知目标类型的输入值转换为三种数据类型之一(数字、原始日期时间或字符串)。我们现有的函数返回一个

{:ok, new_value}
{:error, old_value}
元组。现在我正在使用以下
with
逻辑:

with {:error, value} <- coerce_to_number(value),
     {:error, value} <- coerce_to_naive_datetime(value),
     {:error, value} <- coerce_to_string(value) do
  :error
else
  {:ok, value} -> {:ok, value}
end

就我个人而言,我对这种逻辑感到满意,并且喜欢

with
如何表达我们在转换输入值时采取的步骤。然而,我有一些同事不喜欢使用
else
中的
with
来表示“快乐路径”。有没有更惯用的方式来表达上面的逻辑?

elixir
1个回答
0
投票

当人们“一起”学习时,它通常被视为一种将幸福之路串联在一起的方式。在我看来,这确实有害,因为它显然有更广泛的应用。

我的 2 美分:你的方法没有任何问题,但如果你的同事对此感到困惑,请考虑其他选择。向人们介绍新想法是有价值的,但最终您希望团队能够理解代码库。

我确实认为如果

value
没有改变,就没有必要重新绑定它。在不改变强制函数返回的内容的情况下,我只会匹配
{:error, _value}
。所有“其他”真正做的就是断言唯一可以返回的其他东西是
{:ok, new_value}
。如果您的强制函数不清楚仅返回
{:ok, new_value}
{:error, old_value}
,那就太好了,但除非这是一个问题,否则我根本不会包含“else”。

© www.soinside.com 2019 - 2024. All rights reserved.