【问题标题】:comparison using if with erlang使用 if 与 erlang 进行比较
【发布时间】:2018-07-01 01:56:56
【问题描述】:

我使用二郎语言

我想创建一个函数来检查 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 中找不到这个概念的等价物

【问题讨论】:

    标签: erlang


    【解决方案1】:

    在 Erlang 中,使用 andalso 而不是 &&

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

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

    【讨论】:

      【解决方案2】:

      通常最好使用匹配:

      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.
      

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

      【讨论】:

        【解决方案3】:

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

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-06-21
          • 1970-01-01
          • 2019-07-24
          • 1970-01-01
          • 1970-01-01
          • 2020-02-01
          • 1970-01-01
          相关资源
          最近更新 更多