Использовать карту для накопления атрибута модуля: true - PullRequest
0 голосов
/ 04 июня 2018

Я могу зарегистрировать атрибут модуля с параметром накопить как true, как это

 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 голосов
/ 05 июня 2018

Вы не можете.accumulate: true создает список , и это в жестком коде .

Единственное возможное решение состоит в том, чтобы получить различные переменные с Module.register_attribute/3 ииспользуйте Module.put_attribute/3 для динамического обновления переменных.

...