鉴于一个函数可以保证将一个数字作为输入,我应该包含逻辑隐含的保护条款,还是应该省略它们?
def check(x) when x < 5, do: :ok
def check(x) when x >= 5, do: :error
#or
def check(x) when x < 5, do: :ok
def check(x), do: :error
答案 0 :(得分:4)
第二个保护是冗余的,尽管输入是否有保证,但它会在非整数输入上引起更不易识别的错误消息。而不是:
def check(x) when x >= 5, do: :error
可以做更准确的检查:
def check(x) when not is_integer(x) and not is_float(x), do: :type_error
def check(x) when x < 5, do: :ok
def check(x), do: :value_error # here x is guaranteed to be numeric ge 5