2012-06-17 30 views
1

我想交換兩個引用,是否有一個很好的方法使這樣的構造工作?並行可變賦值在F#

let mutable sarlast = ref (Array.copy ar) 
let mutable sarcurr = ref (Array.copy ar) 
... some code ... 

sarcurr, sarlast <- sarlast, sarcurr 
+4

這個例子是一個有點瘋狂:你有一個可變的變量指向一個參考的'ref'類型! –

+0

好點。數組已經是引用類型,所以不需要再次使用ref。如果不是優秀的代碼,我想這是對「引用透明」的一個很好的例證。 – nicolas

回答

3

不,<-是單一賦值,元組在F#中是不可變的。

您可以定義中綴函數爲目的(由@bytebuster一個班輪建議):

let (>-<) x y = let temp = !x in x := !y; y := temp 

// Usage 
let a = ref [|1|] 
let b = ref [|2|] 
a >-< b 
+2

甚至更​​短:'let(> - <)x y = let temp =!x in x:=!y; y:= temp' – bytebuster

+0

let temp = ref(!x)不是微不足道的,而且很具說明性 – nicolas

+0

@bytebuster不錯的一個...擠壓langage果汁直到最後一滴 – nicolas