elixir – 在为函数子句定义守卫时,应该有多严格?

当我定义我的函数子句时,我应该有多严格?

Elixir允许编写功能头,范围从无保护,超过检查类型到验证范围内的值.

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

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) ...

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

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

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

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

点赞