2009-06-03 18 views
5

En C#, la función de intercambio clásico es:F #: ¿Cómo escribir la función de intercambio clásica?

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); 

¿cómo iba a escribir que con F #?

(Nota, no quiero que el equivalente funcional en realidad necesito pasar por la semántica de referencia..)

+1

Si no desea que la versión de función, entonces ¿por qué usar F #? – crashmstr

+1

¿Realmente importa por qué? La pregunta es una pregunta ... aún merece una respuesta. – jrista

+2

F # no es una isla. En este caso, estoy trabajando en wrappers para procedimientos SQL almacenados que dependen en gran medida de los parámetros de salida. Necesito que se sitúe entre la API de estilo de función y la API de estilo sql. –

Respuesta

9

Pruebe lo siguiente

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

Ejemplo de código de 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, usaría ref-cells en lugar de let mutable.

+0

¿Estás seguro de eso? Pensé que había leído que uno debería preferir mutables cuando sea posible. –

1

/// Una función que intercambia el orden de los dos valores en una tupla

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

Esta pregunta no se trata de intercambiar en tuplas, sino de algo como 'let temp = a; a <-b; b <-temp' –

Cuestiones relacionadas