2009-06-03 28 views
5

Trong C# chức năng hoán đổi cổ điển là:F #: Cách viết chức năng hoán đổi cổ điển?

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

Làm thế nào tôi sẽ viết rằng với F #?

(Lưu ý, tôi không muốn hành vi tương tự tôi thực sự cần phải vượt qua bằng cách ngữ nghĩa tham khảo..)

+1

Nếu bạn không muốn phiên bản chức năng, thì tại sao sử dụng F #? – crashmstr

+1

Liệu nó thực sự quan trọng tại sao? Câu hỏi là một câu hỏi ... vẫn xứng đáng là một câu trả lời. – jrista

+2

F # không phải là một hòn đảo. Trong trường hợp này, tôi đang làm việc trên các trình bao bọc cho các thủ tục lưu sẵn SQL phụ thuộc rất nhiều vào các tham số đầu ra. Tôi cần điều này để ngồi giữa API kiểu hàm và API kiểu sql. –

Trả lời

9

Hãy thử như sau

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

Ví dụ mã của 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 

Thông thường, bạn sẽ sử dụng ref-cells thay vì có thể thay đổi được.

+0

Bạn có chắc chắn về điều đó không. Tôi nghĩ rằng tôi đọc rằng một trong những nên thích mutables khi có thể. –

1

/// Một chức năng mà giao dịch hoán đổi thứ tự của hai giá trị trong một tuple

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

Câu hỏi này không phải là về trao đổi trong bộ dữ liệu, nhưng về một cái gì đó như 'let temp = a; a <-b; b <-temp' –

Các vấn đề liên quan