【问题标题】:How to effectively represent flags in Elixir?如何在 Elixir 中有效地表示标志?
【发布时间】:2014-10-06 23:48:34
【问题描述】:

我在 Elixir 中有一个函数,它可以以带有可选标志的状态之一结束:okblockedok_spawned阻塞_spawned。 (在这种情况下,“_spawned”是标志。)将来状态和标志的数量可以增加。

我的问题是 - 实现这一点的最佳方法是什么?所以我可以轻松检查标志/整体状态?

我的想法是 Map 或一些元组,其中第一个元素是基本状态,第二个是标志的表示,但我不确定哪个更好。

非常感谢任何想法。

【问题讨论】:

  • 我不确定,但您的返回值如此灵活这一事实可能表明存在设计缺陷。也许你的方法做得太多了?对于公共 API 的用户,通常只有两个结果感兴趣:在成功的情况下,约定是返回 :ok{:ok, return_value}。如果失败,您应该返回{:error, reason}。您希望该方法的使用者如何处理所有这些返回的标志?使用起来似乎太复杂了。

标签: elixir


【解决方案1】:

我会简单地使用原子和一个元组:

http://elixir-lang.org/getting_started/2.html#2.3-atoms

http://elixir-lang.org/getting_started/2.html#2.7-tuples

可能是这样的:

{:ok, nil}
{:ok, :blocked}
{:ok, :spawned}
{:blocked, :spawned}

但也许我没有正确理解您的问题?

【讨论】:

  • 感谢您的回答。我了解如何添加另一个状态(只是第一个位置上的另一个原子)。但是,如何表示具有两个或多个标志的状态(将来)?假设 :ok 带有标志 :spawned 和 :new_flag? PS:我相信第二个应该是{:blocked, nil}
  • 如果标志的数量是动态的,考虑使用HashSet (elixir-lang.org/docs/stable/elixir/HashSet.html) 作为元组的第二个元素。
  • @TomášBrukner 正如我所说,我不完全确定我是否理解您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
相关资源
最近更新 更多