gpt4 book ai didi

elixir - 为什么我的 Elixir 函数返回一个列表列表?

转载 作者:行者123 更新时间:2023-12-01 23:37:07 27 4
gpt4 key购买 nike

我有一个由函数 make_struct 返回的结构,就像这样:

%Example.Struct{example: 1, example_again: 2}

(即不带括号,如:[ %Example... ]),至少我认为它像上面那样返回,但函数在 GenServer 模块中,有时我注意到我的函数返回出于某种我不理解的原因列表中的值?

我想返回这些结构的列表:

def foo(data_as_a_list) do
my_list = []
for entry <- data_as_a_list do
my_list = [ make_struct(entry) | my_list ]
end
end

这将返回一个结构列表,每个结构都在一个列表中:

[
[
%Example.Struct{example: 1, example_again: 2}
],
[
%Example.Struct{example: 1, example_again: 2}
]
]

我只想:

[
%Example.Struct{example: 1, example_again: 2},
%Example.Struct{example: 1, example_again: 2}
]

最佳答案

Elixir 的 for 不像大多数语言的 for 循环那样工作——它们是推导式,而不是循环。我建议阅读 the Elixir guide's page on it .

Comprehensions 已经返回一个列表(默认情况下;在指定 :into 时可能是另一个 Collectable),其中包含 for< 的每次执行的返回值do block 。在简单的情况下,它就像一个 Enum.map。因此,您可以使用其中任何一种来获得所需的结果:

def foo(data_as_a_list) do
for entry <- data_as_a_list do
make_struct(entry)
end
end
def foo(data_as_a_list) do
Enum.map(data_as_a_list, &make_struct/1)
end

我认为第二个更符合习惯,因为 mapping 函数非常常见。理解主要用于当您有更复杂的要求时。

关于elixir - 为什么我的 Elixir 函数返回一个列表列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65385427/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com