Erlang-解析封闭大括号中的数据
Erlang专家们,我从ejabberd服务器获得如下数据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
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