用于创建新结构列表的 Elixir 列表理解
Elixir List Comprehension to Create a New List of Structs
我对 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
接受另一个函数,该函数 return 是一个结构列表。真正的实现调用数据库。此代码用于 ExUnit 测试,我正在尝试 return 一些存根数据。
似乎我在这里遇到了明显的错误。这是我 运行 时得到的错误:mix test
** (Protocol.UndefinedError) protocol Enumerable not implemented for
%Holding{client_id: 1, company: "---", company_id: 1, revenue: 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
我对 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
接受另一个函数,该函数 return 是一个结构列表。真正的实现调用数据库。此代码用于 ExUnit 测试,我正在尝试 return 一些存根数据。
似乎我在这里遇到了明显的错误。这是我 运行 时得到的错误:mix test
** (Protocol.UndefinedError) protocol Enumerable not implemented for
%Holding{client_id: 1, company: "---", company_id: 1, revenue: 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