使用if与erlang进行比较

时间:2012-12-27 10:02:34

标签: erlang

我使用erlang

我想创建一个函数来检查Cin和Id是否为空

我尝试过:

if Cin /= null && Id/=null -> {ok,Cin et Id sont différents de null};
     true -> {nok,Cin et Id sont  null}

    end.

我知道'&&'的概念在erlang中不存在

但我在erlang

中找不到相同的概念

3 个答案:

答案 0 :(得分:6)

在Erlang中,使用andalso代替&&

if Cin /= null andalso Id/=null -> {ok,Cin et Id sont différents de null};

andalso的使用是短路的,相当于&&。常规and运算符始终评估表达式的两边并且不会短路。

答案 1 :(得分:6)

通常,最好使用匹配:

case {Cin, Id} of
  {null, _} -> cin_null;
  {_, null} -> id_null;
  {_, _}    -> not_null
end

但是请注意,你可以完全没有检查。在功能头中添加一个保护:

my_func(Cin, Id) when is_integer(Cin), is_binary(Id) ->
  do_something.

如果匹配不匹配,则会发生崩溃,但这通常是您希望在代码库中发生的事情。

答案 2 :(得分:2)

您可以创建函数并使用模式匹配:

is_null(null, null) ->
  true;
is_null(_, _) ->
  false.

在控制台中:

1> c(some_mod).
{ok,some_mod}
2> some_mod:is_null(null, 1).
false
3> some_mod:is_null(1, 1).   
false
4> some_mod:is_null(null, null).
true