Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang模块挂钩上的ejabberd 2.1.11错误_Erlang_Xmpp_Ejabberd - Fatal编程技术网

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文件
但当我向ejabberd服务器发送脱机消息时,日志文件中出现以下错误:



如果有任何帮助,我正在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已对其进行了编辑以遵守指南