How do you return multiple values and assign them to mutable variables?

橙三吉。 提交于 2019-12-05 16:04:13

问题


This is what I have so far.

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)

回答1:


You can't; there's no syntax to update 'more than one mutable variable' with a single assignment. Of course you can do

let newX, newY = Swap(x,y)
x <- newX
y <- newY



回答2:


The code you have commented doesn't work because when you write "x, y" you create a new tuple that is an immutable value, so can't be updated. You could create a mutable tuple and then overwrite it with the result of the swap function if you want:

let mutable toto = 5, 10 

let swap (x, y) = y, x

toto  <- swap toto

My advice would be to investigate the immutable side of F#, look at the ways you can use immutable structures to achieve what you previously would have done using mutable values.

Rob




回答3:


F# has "by reference" parameters just like C#, so you can write a classic swap function similarly:

let swap (x: byref<'a>) (y: byref<'a>) =
    let temp = x
    x <- y
    y <- temp

let mutable x,y = 1,2
swap &x &y



回答4:


To expand on Robert's answer:

let swap (x : int, y : int) = y, x
let mutable x = 5
let mutable y = 10
let mutable xy = x, y

xy <- swap xy

Makes both the variables and the tuple mutable.



来源:https://stackoverflow.com/questions/946977/how-do-you-return-multiple-values-and-assign-them-to-mutable-variables

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!