Понимание списка эликсиров для создания нового списка структур

Я новичок в Эликсире и пытаюсь получить новый список структур, используя понимание списка, и, похоже, я не могу понять это правильно:

holdings = ServiceX.update_holdings(
         fn() -> for n <- 1..3, do: n end,
         &(for n <- 1..100, do: %Holding {
                                  client_id: &1,
                                  company_id: n,
                                  company: "---",
                                  revenue: 0.0 }
         ))

update_holdings принимает другую функцию, которая возвращает список структур. Реальная реализация обращается к базе данных. Этот код предназначен для теста ExUnit, где я пытаюсь вернуть некоторые заглушенные данные.

Кажется, я получаю что-то очевидное неправильно здесь. Вот ошибка, которую я получаю при запуске: mix test

** (Protocol.UndefinedError) protocol Enumerable not implemented for 
   %Holding{client_id: 1, company: "---", company_id: 1, revenue: 0.0}

Так что мне не хватает импорта модуля или как еще мне создать список структур, используя понимание списка?


person J du Preez    schedule 08.06.2017    source источник
comment
Можете ли вы опубликовать фактический код? &1 недопустимый синтаксис, если это полный код, и вы должны получить сообщение об ошибке.   -  person Dogbert    schedule 08.06.2017
comment
@Dogbert разработал в соответствии с просьбой. Спасибо.   -  person J du Preez    schedule 08.06.2017
comment
Я не вижу проблемы с кодом, который вы разместили. Я подозреваю, что проблемы возникают из-за того, как вы обрабатываете результаты веселья. Вы должны опубликовать реализацию ServiceX.update_holdings.   -  person Steve Pallen    schedule 08.06.2017
comment
@StevePallen Спасибо, что указали мне правильное направление. Вы помогли мне ответить на мой собственный вопрос. Спасибо!   -  person J du Preez    schedule 12.06.2017


Ответы (1)


Неверный код:

def update_holdings(f1, f2) do
     ids = f1.()
     for id <- ids,
         holdings <- f2.(id),
         holding <- holdings,
         do: holding
 end

Проблема в лишнем вложенном перечислении holding <- holdings. Это любительская ошибка, потому что я неправильно понял, как это работает в Эликсире. Изменение вышеуказанного на следующее устранило проблему:

def update_holdings(f1, f2) do
     ids = f1.()
     for id <- ids,
         holding <- f2.(id),
         do: holding
 end
person J du Preez    schedule 12.06.2017
comment
@StevePallen, ты был совершенно прав. Я сделал ошибку нуба в методе update_holdings. Спасибо, что указали мне правильное направление. - person J du Preez; 12.06.2017