2009-06-03 12 views
5

In C# la funzione swap classico è:F #: come scrivere la funzione di scambio classico?

void swap (ref int a, ref int b){ 
    int temp = a; 
    a = b; 
    b = temp; 
} 

int a = 5; 
int b = 10; 
swap(ref a, ref b); 

Come dovrei scrivere che con F #?

(Nota, non voglio l'equivalente funzionale in realtà ho bisogno di passare la semantica di riferimento..)

+1

Se non si desidera la versione funzione, quindi perché usare F #? – crashmstr

+1

Ha davvero importanza perché? La domanda è una domanda ... merita comunque una risposta. – jrista

+2

F # non è un'isola. In questo caso sto lavorando su wrapper per le stored procedure SQL che si basano molto sui parametri di output. Ho bisogno di questo per sedermi tra l'API in stile funzione e l'API in stile sql. –

risposta

9

Provate il seguente

let swap (left : 'a byref) (right : 'a byref) = 
    let temp = left 
    left <- right 
    right <- temp 
8

Esempio per il codice di Jared:

let mutable (a, b) = (1, 2) 

let swap (left : 'a byref) (right : 'a byref) = 
    let temp = left 
    left <- right 
    right <- temp 

printfn "a: %i - b: %i" a b 
swap (&a) (&b) 
printfn "a: %i - b: %i" a b 

Normalmente, dovresti usare ref-cells invece di mutabile.

+0

Ne sei sicuro? Ho pensato di leggere che uno dovrebbe preferire i mutabili quando possibile. –

1

/// Una funzione che scambia l'ordine dei due valori in una tupla

let Swap (a, b) = (b, a) 
+0

Questa domanda non riguarda lo swapping in tuple, ma qualcosa come 'let temp = a; a <-b; b <-temp' –

Problemi correlati