2009-10-06 24 views

Trả lời

19

Đối với một # mở rộng F có thể được gọi từ F #:

type System.String with 
    member x.Right(index) = x.Substring(x.Length - index) 

Lưu ý rằng tính Beta 1, điều này không dẫn đến phương pháp mở rộng tương thích C#.

Để tạo các phương thức mở rộng hiển thị từ C# (nhưng không thể sử dụng như các phương thức mở rộng trong F #), hãy xem liên kết trong bản chỉnh sửa của Brian đối với bài đăng gốc.

+0

darn, đó là những gì tôi muốn. – esac

3

Tôi biết điều này không thực sự trả lời câu hỏi của bạn, nhưng điều đáng chú ý là chỉ ra. Trong F # và các ngôn ngữ chức năng khác, bạn thường thấy các mô-đun với các phương thức tĩnh (Giống như mô đun Seq) được thiết kế để bao gồm các hàm khác. Theo như tôi đã thấy, các phương thức thể hiện không dễ dàng được tạo ra, đó là một trong những lý do tại sao các mô-đun này tồn tại. Trong trường hợp của phần mở rộng này, bạn có thể muốn thêm một hàm vào mô-đun Chuỗi.

module String = 
    let right n (x:string) = 
     if x.Length <= 2 then x 
     else x.Substring(x.Length - n) 

Sau đó, nó sẽ được sử dụng như vậy.

"test" 
|> String.right 2 // Resulting in "st" 

["test"; "test2"; "etc"] 
|> List.map (String.right 2) // Resulting in ["st"; "t2"; "tc"] 

Mặc dù trong trường hợp này, phương pháp mở rộng sẽ không có nhiều mã hơn.

["test"; "test2"; "etc"] 
|> List.map (fun x -> x.Right 2) 
Các vấn đề liên quan