gpt4 book ai didi

在 Guards 中使用函数时出现 erlang "illegal guard expression"

转载 作者:行者123 更新时间:2023-12-02 06:43:35 34 4
gpt4 key购买 nike

我有以下代码。我正在检查 3 个条件。您可以看到,对于第一个条件,我将 xml:get_tag_attr_s(...) 的输出存储在变量中,然后在 if block 中使用该变量。我的问题是,如果我尝试像处理其他两个条件一样在一行中执行上述过程,则会收到错误非法保护表达式

另外,我从默认条件中得到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.

最佳答案

Erlang 只允许这些作为守卫:

有关更多信息,请查看 http://www.erlang.org/doc/reference_manual/expressions.html#id83606

使用 true 而不是 _。您不能在 if 中使用 _,只能在 case 语句中使用,并且还可以查看 docs .

关于在 Guards 中使用函数时出现 erlang "illegal guard expression",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34295254/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com