2017-02-23 68 views
0

我幾乎讀過互聯網上不可變/可變變量的每一個定義,但作爲一個初學者,我只是不完全掌握它,所以我想知道是否有人能真正用通俗的話來解釋它。不可變和可變變量的區別是什麼?

任何編程語言中的不可變變量(或對象)都是我理解的,當它在賦值之後無法更改該變量的值時。例如,我現在用的是Haskell的編程語言,和我寫的:

let x = 5 

由於Haskell有不可改變的變量,X絕不能有任何其他值大於5所以,如果我這一行代碼寫後:

x = 2 

我實際上並沒有改變x的值,而是用相同的名字創建了一個新的變量,現在我調用x時會引用這個變量,所以在兩行代碼之後我只能達到x的值爲2.

但是什麼是一個可變變量然後什麼p程序語言有它嗎?這是對我來說很霧的地方。因爲當人們說可變變量時,它們顯然指的是一個變量或對象,其值可能確實在它被分配了一個初始值後發生了變化。

這是否意味着,如果你有一個可變變量你實際上操縱,在計算機內存地方是可變的,在不變的變量的情況下,你不能操縱計算機內存或什麼地方?

我不知道如何進一步解釋我的問題,正如我所說,我知道mutable =可以在初始值賦值後更改變量的值,immutable =不能。我得到了定義。但我不明白它在「幕後」發生了什麼。我想我正在尋找關於實際可變變量的簡單例子。

回答

0

這有什麼好做不變性

let x = 5 
x = 2 

這是再分配絕對哈斯克爾不允許


首先讓我們來看看一個普通let分配

Prelude> let x = 5 in x 
5 
it :: Num a => a 

你可以b IND x使用let,並重新綁定嵌套let一個x - 這實際上陰影x

Prelude> let x = 5 in let x = 2 in x 
2 
it :: Num a => a 

還記得let基本上是一個lambda

Prelude> (\x -> x) 5 
5 
it :: Num a => a 

過程中和lambda可以返回一個lambda;說明陰影谷歌

Prelude> (\x -> (\x -> x)) 5 2 
2 
it :: Num a => a 
相關問題