我想指出一個F#中的'風險'部分。請看下面的代碼使用F#可變值的模式匹配
let mutable a, b as ab = 0, 0
a <- 4
a
ab
你會得到a = 4
和ab = 0, 0
。這可能是一個正確的行爲,我只是想指出並瞭解你的意見。你覺得這種行爲是否合乎邏輯,爲什麼?我有一些問題需要接受,因爲我一直認爲(a,b)和ab應該是相同的。
我想指出一個F#中的'風險'部分。請看下面的代碼使用F#可變值的模式匹配
let mutable a, b as ab = 0, 0
a <- 4
a
ab
你會得到a = 4
和ab = 0, 0
。這可能是一個正確的行爲,我只是想指出並瞭解你的意見。你覺得這種行爲是否合乎邏輯,爲什麼?我有一些問題需要接受,因爲我一直認爲(a,b)和ab應該是相同的。
如果你在F#交互運行let mutable a, b as ab = 0, 0
您將獲得:
val mutable ab : int * int = (0, 0)
val mutable b : int = 0
val mutable a : int = 0
這意味着表達創造了3個不同的和獨立的價值觀。修改一個值不會影響其他值
確實,這可能會讓您感到困惑,但一旦您瞭解F#如何處理聲明(如Ankur所解釋的),應該很有道理。
你可以得到其他行爲(如修改一個值也修改一個元組),如果你使用的參考單元,而不是mutable
變量:
let a, b as ab = ref 0, ref 0
a := 4
!(fst ab) // returns 4