使用map for module属性accumulate:true

时间:2018-06-04 15:29:24

标签: elixir

我可以使用选项accumulate注册模块属性,如此

 Module.register_attribute __MODULE__, :structs, accumulate: true


  for line <- [%{"some" => %{"test1" => 1, "test2" => 2}}, %{"some" => %{"test1" => 3, "test2" => 4}}] do
    @structs %Struct{
        some: line["some"]
      }
  end

然后我有以下列表。

[
  %Test.Struct{some: %{"test1" => 3, "test2" => 4}},
  %Test.Struct{some: %{"test1" => 1, "test2" => 2}}
]

但是如果我想要一张地图怎么办?怎么能实现这一目标?

我尝试了以下内容来定义@tests[v]但不会工作

  Module.register_attribute __MODULE__, :tests, accumulate: true

  @moduledoc """
  for line <- [%{"some" => %{"test1" => 1, "test2" => 2}}, %{"some" => %{"test1" => 3, "test2" => 4}}] do
    Enum.each(line["some"], fn {k, v} ->
      @tests[v] %Struct{
          some: k
      }
    end)
  end

1 个答案:

答案 0 :(得分:1)

你做不到。 accumulate: true创建列表,这是hardcoded

唯一可行的解​​决方案是使用Module.register_attribute/3生成不同的变量,并使用Module.put_attribute/3动态更新变量。