0

我对 Elixir 很陌生,并试图使用列表理解产生一个新的结构列表,而对于我的生活,我似乎无法做到这一点:

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}

那么我是否缺少模块导入,或者我如何使用列表理解生成结构列表?

4

1 回答 1

0

Incorrect code:

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

The problem is the extra nested enumeration holding <- holdings. This is a amateur mistake because I misunderstood how it works in Elixir. Changing the above to the following fixed the problem:

def update_holdings(f1, f2) do
     ids = f1.()
     for id <- ids,
         holding <- f2.(id),
         do: holding
 end
于 2017-06-12T13:30:29.470 回答