【发布时间】:2015-09-06 22:34:05
【问题描述】:
我是来自 OO 背景的 Elixir 和函数式编程新手。
我一直试图了解 Elixir 中变量重新分配在列表理解中的工作原理。我希望函数 test1() 和 test2() 打印 4,但 test2() 不会重新分配变量并打印 1。
defmodule SampleCode do
def test1 do
num = 1
num = num + 1
num = num + 2
IO.puts num # Prints 4
end
def test2 do
num = 1
for i <- (1..2) do
num = num + i
end
IO.puts num # Prints 1
end
end
- 为什么这些函数的行为不同?
- 这是 Elixir 中的变量作用域还是我缺少的函数式编程的基本原则?
【问题讨论】:
-
我很确定它只是作用域(阅读
num2 = num+i)-顺便说一句:num = num + 1之类的东西在 FP 中是一种反模式,因为如果不重新绑定值,这将毫无意义 -
如果
num = num + 1在 FP 中不受欢迎,那么实现这个的正确方法是什么?递归?有问题的代码是我尝试做的其他事情的一个非常简化的版本,所以它并不像看起来那么简单:) -
是的-在原始级别递归-或稍后折叠之类的东西-在这种简化的情况下,您当然会说
result = 1+1+2或简单地说result=4;)
标签: functional-programming list-comprehension elixir