¿Cómo se puede devolver múltiples valores y asignarlos a variables mutables?

StackOverflow https://stackoverflow.com/questions/946977

  •  09-09-2019
  •  | 
  •  

Pregunta

Esto es lo que tengo hasta ahora.

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)
¿Fue útil?

Solución

No se puede; no hay sintaxis para actualizar 'más de una variable mutable' con una sola asignación. Por supuesto que puede hacer

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

Otros consejos

El código que ha comentado que no funciona porque cuando se escribe "x, y" se crea una nueva tupla que es un valor inmutable, por lo que no se puede actualizar. Se puede crear una tupla mutable y luego escriba el resultado de la función de intercambio si quieres:

let mutable toto = 5, 10 

let swap (x, y) = y, x

toto  <- swap toto

Mi consejo sería investigar el lado inmutable de F #, mirar las formas que puede utilizar las estructuras inmutables para lograr lo que previamente habría hecho uso de valores mutables.

Rob

F # tiene "por referencia" parámetros simplemente como C #, por lo que puede escribir una función de intercambio clásica parecida:

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

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

Para ampliar la respuesta de Robert:

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

xy <- swap xy

hace que tanto las variables y la tupla mutable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top