Nhà điều hành đường ống đơn giản là cú pháp đường cho các cuộc gọi phương thức xích. Nó rất giống với cách biểu thức linq được thể hiện trong C#.
Giải thích từ here:
Forward ống hành Tôi yêu anh chàng này. Các nhà điều hành đường ống Chuyển tiếp đơn giản được định nghĩa là:
let (|>) x f = f x
Và có một loại chữ ký:
'a -> ('a -> 'b) -> 'b
Những dịch để: cung cấp một loại chung 'một, và một chức năng mà phải mất một' a và lợi nhuận a 'b, sau đó trả về ứng dụng của hàm trên đầu vào.
Thay vì giải thích này, hãy để tôi cung cấp cho bạn một ví dụ về nơi nó có thể được sử dụng:
// Take a number, square it, then convert it to a string, then reverse that string
let square x = x * x
let toStr (x : int) = x.ToString()
let rev (x : string) = new String(Array.rev (x.ToCharArray()))
// 512 -> 1024 -> "1024" -> "4201"
let result = rev (toStr (square 512))
Mã này là rất thẳng về phía trước, nhưng thông báo chỉ cách ngang bướng cú pháp trông. Tất cả những gì chúng ta muốn làm là lấy kết quả của một phép tính và chuyển nó cho phép tính tiếp theo. Chúng tôi có thể viết lại bằng cách giới thiệu một loạt các biến mới:
let step1 = square 512
let step2 = toStr step1
let step3 = rev step2
let result = step3
Nhưng bây giờ bạn cần giữ tất cả các biến tạm thời đó một cách thẳng thắn. Điều mà toán tử (|>) thực hiện là lấy một giá trị, và 'chuyển tiếp nó' đến một hàm, về cơ bản cho phép bạn chỉ định tham số của hàm trước khi gọi hàm. Điều này đơn giản hóa đáng kể mã F # bằng cách cho phép bạn kết hợp các hàm ống với nhau, trong đó kết quả của một hàm được truyền vào tiếp theo. Vì vậy, để sử dụng các ví dụ tương tự các mã có thể được viết rõ ràng như:
let result = 512 |> square |> toStr |> rev
Sửa:
Trong F # những gì bạn đang thực sự làm với một phương pháp gọi đang thực hiện một chức năng và sau đó áp dụng nó để thông số sau, vì vậy trong ví dụ của bạn, nó sẽ là List.map (fun x -> x * x * x)
được áp dụng cho [2;4;6]
.Tất cả những gì mà toán tử đường ống thực hiện là lấy các tham số theo thứ tự ngược lại và sau đó làm ứng dụng đảo ngược chúng trở lại.
chức năng: List.map (fun x -> x * x * x)
tham số: [2;4;6]
Chuẩn F # gọi cú pháp: f g
Đảo ngược cú pháp F # gọi: g f
Tiêu chuẩn:
let var = List.map (fun x -> x * x * x) [2;4;6]
Đảo ngược:
let var = [2;4;6] |> List.map (fun x -> x * x * x)
nhà điều hành không phải là tiền tố không phải là tiền tố - bạn đang áp dụng nó cho những điều sai trái –