我是否应该省略长生不老药的逻辑暗示保护条款?

时间:2017-01-24 11:29:59

标签: elixir

鉴于一个函数可以保证将一个数字作为输入,我应该包含逻辑隐含的保护条款,还是应该省略它们?

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

1 个答案:

答案 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