在卫兵中使用功能时的二郎"非法守卫表达"

Kam*_*han 4 erlang

我有以下代码.我正在检查3个条件.您可以查看第一个条件,我将输出存储xml:get_tag_attr_s(...)在变量中,然后在if块中使用该变量.我的问题是我得到错误illegal guard expression,如果我尝试在一行中执行上述过程,就像我在其他两个条件中所做的那样.

此外,我variable '_' is unbound从默认条件.它应该是一回事.

有人可以解释一下这个问题吗?

validate_xmpp(Packet) ->
      Type = xml:get_tag_attr_s(list_to_binary("type"), Packet),
      if
          (Type /= <<"chat">> ->
              {error, "Message type is not chat"};
          xml:get_path_s(Packet, [{elem, list_to_binary("body")}, cdata]) /= <<"">> ->
              {error, "No or empty body"};
          exml_query:path(Packet, [{element,<<"received">>},{attr,<<"xmlns">>}]) == <<"urn:xmpp:receipts">> ->
              {error, "delivery-receipts should be ignored"};
          _->
              {ok, xml:get_tag_attr_s(list_to_binary("from"), Packet)}
      end.
Run Code Online (Sandbox Code Playgroud)

ipi*_*nak 9

Erlang只允许这些守卫:

  • 原子是真的
  • 其他常量(术语和绑定变量)都被认为是假的
  • 调用表类型测试BIF中指定的BIF
  • 术语比较
  • 算术表达式
  • 布尔表达式
  • 短路表达式(也是/ orelse)

欲了解更多信息,请访问http://www.erlang.org/doc/reference_manual/expressions.html#id83606

而不是true使用andalso.不能使用orelse_,只是在true说明,也看看的文档.