我有以下几点:为什么变量不会在这个灵药无限流中被反弹?
counter = 0
try do
for _ <- Stream.cycle([:ok]) do
IO.puts "Counter is #{counter}"
counter = counter + 1
IO.puts "After counter: #{counter}"
if counter == 3 do
throw :halt
end
end
catch
:halt -> IO.puts "Finished processing"
end
从我读过,我认为counter = counter + 1
将重新绑定变量,并最终counter == 3
条件将是真实的。然而,我得到的输出是这样的:
Counter is 0
After counter: 1
Counter is 0
After counter: 1
Counter is 0
...
所以,基本上,计数器回到初始值。感觉像for内部的rebinding像局部变量一样工作,或者阴影第一个。我怎样才能让这个值保持不变(如果可能的话,没有递归)?
感谢您的回答!我不喜欢递归,我只是好奇是否有其他方式退出循环时满足条件,而不必使用递归。 – Geo