Come si fa a restituire più valori e li assegna alle variabili mutabili?

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

  •  09-09-2019
  •  | 
  •  

Domanda

Questo è quello che ho finora.

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)
È stato utile?

Soluzione

Non è possibile; non c'è sintassi per aggiornare 'più di una variabile mutabile' con una singola assegnazione. Naturalmente si può fare

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

Altri suggerimenti

Il codice che avete commentato non funziona perché quando si scrive "x, y" si crea una nuova tupla che è un valore immutabile, quindi non può essere aggiornato. Si potrebbe creare una tupla mutevole e quindi sovrascrivere con il risultato della funzione di scambio, se si desidera:

let mutable toto = 5, 10 

let swap (x, y) = y, x

toto  <- swap toto

Il mio consiglio sarebbe quello di indagare il lato immutabile di F #, guardare i modi è possibile utilizzare strutture immutabili per ottenere quello che in precedenza avrebbe fatto utilizzando i valori mutevoli.

Rob

F # ha "per riferimento" parametri, proprio come C #, in modo da poter scrivere una funzione di scambio classico simile:

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

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

Per espandere sulla risposta di 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

rende sia le variabili e la tupla mutabile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top