Bạn không thể định nghĩa các nhà khai thác postfix trong F # - xem 4.4 Operators and Precedence. Nếu bạn đồng ý làm cho nó tiền tố thay vào đó, sau đó bạn có thể định nghĩa, ví dụ,
let (++) x = incr x; !x
và sử dụng nó như sau:
let y = ref 1
(++) y;;
val y : int ref = {contents = 2;}
CẬP NHẬT: như fpessoa chỉ ra ++
không thể được được sử dụng như một nhà điều hành tiền tố chính hãng, thực sự (xem here và there cho các quy tắc khi ký tự và chuỗi ký tự bao gồm các toán tử tiền tố F # hợp lệ).
Điều thú vị là unary +
có thể bị quá tải với mục đích:
let (~+) x = incr x; !x
phép
let y = ref 1
+y;;
val y : int ref = {contents = 2;}
Tuy nhiên, nó có ý nghĩa kể rằng ý tưởng lặp lại một mảng như dưới đây
let v = [| 1..5 |]
let i = ref -1
v |> Seq.iter (fun _ -> printfn "%d" v.[+i])
vì mục đích "dễ đọc" trông ít nhất là phạm vi so với cách chức năng thành ngữ
[|1..5|] |> Seq.iter (printfn "%d")
mà một số bắt đầu đã có ý kiến cho câu hỏi ban đầu.
Nguồn
2012-04-20 20:54:20
Một câu hỏi: tại sao bạn cần điều này? – pad
Tôi với @pad trên cái này - trong khi câu hỏi là hợp lệ và câu trả lời đã được cung cấp (như một toán tử tiền tố), ví dụ được đưa ra ở đây không phải là kiểu F #. Hiếm khi một lý do tốt để làm một cái gì đó như thế này. – yamen
Tôi muốn điều đó cho dễ đọc. (Tôi đến từ nền C++/C#). Tôi mặc dù nó có thể nhưng không thể làm cho nó bản thân mình. –