Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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-解析封闭大括号中的数据_Erlang_Ejabberd_Erlang Shell_Erlangweb_Erlang Driver - Fatal编程技术网

Erlang-解析封闭大括号中的数据

Erlang-解析封闭大括号中的数据,erlang,ejabberd,erlang-shell,erlangweb,erlang-driver,Erlang,Ejabberd,Erlang Shell,Erlangweb,Erlang Driver,Erlang专家们,我从ejabberd服务器获得如下数据 I(<0.397.0>:mod_http_offline:38) : Data of Fromu {jid,"timok","localhost", "25636221451404911062246700", "timok","localhos

Erlang专家们,我从ejabberd服务器获得如下数据

I(<0.397.0>:mod_http_offline:38) : Data of Fromu {jid,"timok","localhost",
                                              "25636221451404911062246700",
                                              "timok","localhost",
                                              "25636221451404911062246700"}
再次感谢您的时间和努力。

这是一个erlang记录(它是一个元组,第一个元素是原子,其他元素是列表/字符串/二进制文件)

推荐:

Ejabberd有一个定义(第411行):

现在,在访问数据的(第一个)“timok”元素的模块中,可以使用erlang记录语法(假设JidData包含上述数据):

不推荐:

由于记录的外观是元组,因此您还可以访问元组的第n个元素

Out = element(2,JidData).
或者简单地使用模式匹配:

{_, Out, _, _, _, _} = JidData.
{_, Username, _, _, _, _} = _From
使用记录定义

记录基本上是元组上的合成糖。它仍然是一个元组,可以这样处理。它们很容易处理,但是你应该尽你所能避免把一个记录当作一个元组,除非你真的知道你在做什么


因为在这种情况下,您甚至不控制记录定义,所以您确实应该使用它,否则在更新后对定义的更改将使您的代码无效。

您似乎试图从访问存储在变量
\u中的元组中的第二项。只需使用模式匹配即可访问:

{_, Out, _, _, _, _} = JidData.
{_, Username, _, _, _, _} = _From

因为您使用的是from变量,所以它前面不应该有下划线。在将代码从
更改为从更改为

的过程中,如果erlang shell已经知道记录定义,则上述操作仅在erlang shell中有效。为了在模块中使用记录定义,应该包括相关的ejabberd头文件(如果有这样的文件)。@Berzemus-非常感谢您的回答。在您的回答的帮助下,我能够检索到该值。
{_, Out, _, _, _, _} = JidData.
{_, Username, _, _, _, _} = _From