我对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}
我是否错过了模块导入,或者如何使用列表推导生成结构列表?
答案 0 :(得分:0)
代码不正确:
def update_holdings(f1, f2) do
ids = f1.()
for id <- ids,
holdings <- f2.(id),
holding <- holdings,
do: holding
end
问题是额外的嵌套枚举holding <- holdings
。这是一个业余的错误,因为我误解了它在Elixir中是如何工作的。
将上面的内容改为以下修正了问题:
def update_holdings(f1, f2) do
ids = f1.()
for id <- ids,
holding <- f2.(id),
do: holding
end