gpt4 book ai didi

enums - 为什么在 Enum.each 中设置的变量没有保存?

转载 作者:行者123 更新时间:2023-12-04 00:38:43 29 4
gpt4 key购买 nike

我试图在 Enum.each 的函数内为变量设置一个值,但在循环结束时,变量为空,我不知道为什么会出现这种行为。

代码:

base = "master"
candidates = ["stream", "pigeons", "maters"]

return = []
Enum.each(candidates, fn candidate ->
cond do
String.length(base) == String.length(candidate) ->
return = return ++ [candidate]
true ->
true
end
end)
IO.inspect return

在这个例子中, return 应该是 ["stream", "maters"] ,但它只是一个空列表: []
我的问题是为什么会发生这种情况。

最佳答案

在处理像 Elixir 这样的语言时,最好从“值”和“名称”而不是“变量”的角度考虑。

你不能做你想做的事情的原因是 Elixir 有 "lexical scoping"
当您分配给“变量”时,您会在内部范围内创建一个新值。您永远不会更改在外部作用域中定义的“名称”的“值”。

(你可能可以用 Enum.filter/2 得到你想要的东西,但我猜这只是一个说明性的例子)

编辑:

截至今天,Elixir 将允许您编写如下内容:

if condition_that_evals_to_false do
x = 1
else
x = 2
end

IO.inspect x # => 2

``

但这将在 Elixir 1.3 中被弃用

关于enums - 为什么在 Enum.each 中设置的变量没有保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37283718/

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