我要求Elixir中的for循环返回一个计算值。
以下是我的简单示例:
a = 0
for i <- 1..10
do
a = a + 1
IO.inspect a
end
IO.inspect a
这是输出:
warning: variable i is unused
Untitled 15:2
2
2
2
2
2
2
2
2
2
2
1
我知道我未被使用,可用于代替本例中的a,但这不是问题。问题是如何让for循环返回变量a = 10?
答案 0 :(得分:8)
你不能这样做,因为Elixir中的变量是不可变的。您的代码真正做的是在每次迭代时在a
内创建一个新的for
,并且根本不修改外部a
,因此外部a
仍为1,而内在的一直是2
。对于这种初始值模式+更新可枚举的每次迭代的值,您可以使用Enum.reduce/3
:
# This code does exactly what your code would have done in a language with mutable variables.
# a is 0 initially
a = Enum.reduce 1..10, 0, fn i, a ->
new_a = a + 1
IO.inspect new_a
# we set a to new_a, which is a + 1 on every iteration
new_a
end
# a here is the final value of a
IO.inspect a
输出:
1
2
3
4
5
6
7
8
9
10
10