这行erlang代码有什么作用?

时间:2013-12-31 09:44:38

标签: erlang

有人可以向我解释这行erlang代码的作用吗?

[ReportBody|_] = [Body || {<<"val1">>,<<"val2">>,_,_,Body} <- Parts].

您可以假设Parts变量包含以下内容:

[{<<"val1">>,<<"val2">>,
         [{<<"val3">>,
           <<"val4">>},
          {<<"val5">>,<<"val6">>},
          {<<"val7">>,<<"val8">>}],
         [{<<"val9">>,
           [{<<"val10">>,<<"val11">>},{<<"val12">>,<<"val13">>}]},
          {<<"val14">>,<<"val15">>},
          {<<"val16">>,[]}],
         <<"val17">>}]

我假设代码行的要点是验证'Parts'中是否存在'val1'和'val2'并返回'Body'

但我的假设是正确的,我想详细解释这行代码是如何工作的。我是一个二郎的小伙子,所以要温柔。

1 个答案:

答案 0 :(得分:3)

这是list comprehension。它

  1. 要求Parts是一个列表

  2. 对于此列表的每个元素,检查它是否为五元素元组,其中第一个元素是二进制<<"val1">>,第二个元素是<<"val2">>

    1. 如果是,则第五个元素称为Body并添加到结果列表中。

    2. 如果不是,则跳过此元素。

  3. 返回包含所有Body的列表。

  4. (在评论中指出)[ReportBody|_] = ...部分将ReportBody绑定到在3处创建的列表的第一个元素,删除其余元素。