【问题标题】:How strict should one be when defining guards for function clauses?在定义函数子句的保护时应该有多严格?
【发布时间】:2015-03-13 17:36:33
【问题描述】:

定义函数子句时应该有多严格?

Elixir 允许在 no guards 超过 检查类型验证范围内的值 范围内编写函数头。

例如,我不知道在这样的函数中使用什么样式:

def measure(args = %{times: times, path: path}) do ...

def measure(args = %{times: times, path: path}) when is_integer(times) and is_binary(path) do ...

def measure(args = %{times: times, path: path}) when is_integer(times) and times > 0 and is_binary(path) ...

在检查许多情况时,这当然是一个问题:队伍太长,并且为守卫增加一条线路对我来说似乎不是一个好主意。这使得区分实际代码和函数头变得更加困难......

对于我的函数定义的严格性,您有什么建议?

【问题讨论】:

  • 这是一个相当广泛的问题。投票结束。
  • 我知道这个问题没有明确的答案,但我希望有人知道关于这个主题的好文章或类似文章。将标记为已解决。
  • “这个问题没有明确的答案” - - 我可以谦虚地建议您阅读该网站的常见问题解答

标签: elixir


【解决方案1】:

使用警卫检查数据的内容原因是完全可以的。但是使用 Dialyzer (https://github.com/jeremyjh/dialyxir) 可能会更好地确保类型安全。

即使完全不使用防护,也会在其他地方导致匹配错误。因此,如果您需要确保提供给您的数据对您的算法有效,请尽早保护它。

【讨论】:

  • 感谢您的提示。我知道 Dialyzer,但很高兴知道有一个包装器可以将它与 elixir 一起使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
  • 2011-06-22
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多