Erlang:检查两个值是否为零的最短方法?

时间:2015-12-04 14:29:47

标签: erlang

我正在创建一个以XY作为参数的函数,如果false为0,则返回XY为0,或者XY都是0.我目前正在使用案例陈述,但我想知道是否可以将此函数编写得更短(例如合并两者) '虚假案件分为一个案例。)

validate_input(X, Y) ->
    case {X, Y} of
        {0, _} -> false;
        {_, 0} -> false;
        _      -> true
    end.

4 个答案:

答案 0 :(得分:7)

您可以使用andalso

validate_input(X, Y) ->
    X =/= 0 andalso Y =/= 0.

答案 1 :(得分:3)

我感到很惊讶,不,震惊在函数头中只是简单匹配还没有被推荐:

validate_input(0, _) -> true;
validate_input(_, 0) -> true;
validate_input(_, _) -> false.

"紧密"代码不是关于减少行数,而是减少你必须回忆起来解释给定代码段的概念数量。

答案 2 :(得分:1)

另一个解决方案(虽然我更喜欢legoscia)正在使用if

validate_input(X, Y) ->
  if
    X == 0; Y == 0 -> false;
    true -> true
  end.

答案 3 :(得分:0)

经过一番搜索后,我也找到了这个解决方案:

validate_input(X, Y) ->
    case {X, Y} of
        {X, Y} when X == 0; Y == 0 -> false;
        _      -> true
    end.

甚至更高效,正如legoscia建议的那样:

validate_input(X, Y) when X == 0; Y == 0 -> false;
validate_input(_,_) -> true.