在大多数关于Haskell的文章中,你会发现类似“Haskell中的数据是不可变的”这样的说法。我不太明白为什么会这样。例如:
let a = 123
let a = 456
在主方法中运行。我只是将
a
的数据从123
改为456
。我错过了什么?这可能是我思路上的一个愚蠢错误 :/ 祝您拥有美好的一天!在大多数关于Haskell的文章中,你会发现类似“Haskell中的数据是不可变的”这样的说法。我不太明白为什么会这样。例如:
let a = 123
let a = 456
a
的数据从123
改为456
。我错过了什么?这可能是我思路上的一个愚蠢错误 :/ 祝您拥有美好的一天!实际上,a
没有改变。在 ghci
中尝试一下就可以看到:
> a = 123
> action = print a
> a = 456
> action
123
与具有可变变量的语言(例如Python)进行比较:
>>> a = 123
>>> def action(): print a
...
>>> a = 456
>>> action()
456
a
的值,而是创建了一个同名的新对象。在编译时,最后出现的名称被选中。 - Ry-let a = 3
(换行)a = a *2
这样的写法是不被允许的? - jdstaerklet b = a * 2
。(当然,这对某些目的来说是可以正常工作的。) - Ry-let a = a * 2
是完全合法的,但不会产生你期望的效果。试一试吧! - dfeuera <- return (a*2)
在提示符下也是合法的,并且确实会执行预期的操作。或者看起来像它正在做的那样。 :) - Will Ness