这是我到目前为止所做的。
let Swap (left : int , right : int ) = (right, left)
let mutable x = 5
let mutable y = 10
let (newX, newY) = Swap(x, y) //<--this works
//none of these seem to work
//x, y <- Swap(x, y)
//(x, y) <- Swap(x, y)
//(x, y) <- Swap(x, y)
//do (x, y) = Swap(x, y)
//let (x, y) = Swap(x, y)
//do (x, y) <- Swap(x, y)
//let (x, y) <- Swap(x, y)
答案 0 :(得分:11)
你不能;没有语法可以使用单个赋值更新“多个可变变量”。你当然可以做到
let newX, newY = Swap(x,y)
x <- newX
y <- newY
答案 1 :(得分:3)
您评论的代码不起作用,因为当您编写“x,y”时,您创建了一个不可变值的新元组,因此无法更新。您可以创建一个可变元组,然后根据需要用交换函数的结果覆盖它:
let mutable toto = 5, 10
let swap (x, y) = y, x
toto <- swap toto
我的建议是调查F#的不可变方面,看看你可以使用不可变结构来实现你以前使用可变值所做的事情。
罗布
答案 2 :(得分:3)
F#具有“引用”参数,就像C#一样,所以你可以类似地编写一个经典的交换函数:
let swap (x: byref<'a>) (y: byref<'a>) =
let temp = x
x <- y
y <- temp
let mutable x,y = 1,2
swap &x &y
答案 3 :(得分:0)
扩展罗伯特的回答:
let swap (x : int, y : int) = y, x
let mutable x = 5
let mutable y = 10
let mutable xy = x, y
xy <- swap xy
使变量和元组都可变。