Erlang模块挂钩上的ejabberd 2.1.11错误
我一步一步地阅读了这篇文章,我似乎是唯一一个出现这一特定错误的人。Erlang模块挂钩上的ejabberd 2.1.11错误,erlang,xmpp,ejabberd,Erlang,Xmpp,Ejabberd,我一步一步地阅读了这篇文章,我似乎是唯一一个出现这一特定错误的人。 我创建并编译了erlang代码 我将.beam文件添加到指定的位置 我更新了ejabberd.cfg文件 但当我向ejabberd服务器发送脱机消息时,日志文件中出现以下错误: 如果有任何帮助,我正在Windows 7 pc上运行ejabberd 2.1.11,并使用erlang R14B04编译代码。以下是该博客文章中的相关代码: create_message(_From, _To, Packet) ->
- 我创建并编译了erlang代码
- 我将.beam文件添加到指定的位置
- 我更新了ejabberd.cfg文件
如果有任何帮助,我正在Windows 7 pc上运行ejabberd 2.1.11,并使用erlang R14B04编译代码。以下是该博客文章中的相关代码:
create_message(_From, _To, Packet) ->
Type = xml:get_tag_attr_s("type", Packet),
FromS = xml:get_tag_attr_s("from", Packet),
ToS = xml:get_tag_attr_s("to", Packet),
Body = xml:get_path_s(Packet, [{elem, "body"}, cdata]),
if (Type == "chat") ->
post_offline_message(FromS, ToS, Body)
end.
您将得到一个if_子句
错误,这意味着if
表达式的任何子句都不是真的。与许多其他语言不同,Erlang要求至少有一个条件为true,否则会出现这样的运行时错误
因此,问题是当Type
不是“chat”
时,代码应该做什么。如果它什么也不做,则添加一个true
子句:
if (Type == "chat") ->
post_offline_message(FromS, ToS, Body);
true ->
ok
end.
或者更好,将其重写为大小写
表达式。在Erlang中,case
表达式比if
表达式更常见
case Type of
"chat" ->
post_offline_message(FromS, ToS, Body);
_ ->
ok
end.
也就是说,如果
Type
匹配“chat”
,则计算第一个子句,否则,如果它匹配
(通配符匹配),则计算第二个子句。另请参见中的示例。以下是该博客文章中的相关代码:
create_message(_From, _To, Packet) ->
Type = xml:get_tag_attr_s("type", Packet),
FromS = xml:get_tag_attr_s("from", Packet),
ToS = xml:get_tag_attr_s("to", Packet),
Body = xml:get_path_s(Packet, [{elem, "body"}, cdata]),
if (Type == "chat") ->
post_offline_message(FromS, ToS, Body)
end.
您将得到一个if_子句
错误,这意味着if
表达式的任何子句都不是真的。与许多其他语言不同,Erlang要求至少有一个条件为true,否则会出现这样的运行时错误
因此,问题是当Type
不是“chat”
时,代码应该做什么。如果它什么也不做,则添加一个true
子句:
if (Type == "chat") ->
post_offline_message(FromS, ToS, Body);
true ->
ok
end.
或者更好,将其重写为大小写
表达式。在Erlang中,case
表达式比if
表达式更常见
case Type of
"chat" ->
post_offline_message(FromS, ToS, Body);
_ ->
ok
end.
也就是说,如果
Type
匹配“chat”
,则计算第一个子句,否则,如果它匹配
(通配符匹配),则计算第二个子句。另请参见中的示例。是否值得再次打开此问题,因为Legocia已对其进行了编辑以遵守指南。是否值得再次打开此问题,因为Legocia已对其进行了编辑以遵守指南