Theo this post, F # hỗ trợ các phương thức mở rộng đối với các cá thể đối tượng và các lớp tĩnh. Ví dụ:Phương pháp mở rộng tĩnh trên mô-đun Seq
module CollectionExtensions =
type System.Linq.Enumerable with
static member RangeChar(first:char, last:char) = {first .. last}
open ExtensionFSharp.CollectionExtensions
Nếu tôi gõ System.Linq.Enumerable.
, phương pháp tĩnh RangeChar
xuất hiện trong cửa sổ Intellisense của tôi.
Tôi muốn thêm phương pháp tĩnh, for_alli
, vào mô-đun Seq. Tôi đã sửa đổi mã sau đây ở trên như sau:
module SeqExtensions =
type Microsoft.FSharp.Collections.Seq with (* error on this line *)
static member for_alli f l =
l
|> Seq.mapi (fun i x -> i, x)
|> Seq.for_all (fun (i, x) -> f i x)
Mặc dù cả hai đoạn mã có cùng cấu trúc, SeqExtensions
không biên dịch. F # làm nổi bật từ Seq
và trả về lỗi "Loại" Seq 'không được xác định ".
Làm cách nào để tạo phương pháp mở rộng tĩnh trên mô-đun Seq?
tôi biết mình cần phải được đơn giản, cảm ơn bạn :) – Juliet
Xem: [Loại Extensions (F #)] (https://msdn.microsoft.com/en-us/library/dd233211.aspx) và nhận thấy sự khác biệt giữa 'phần mở rộng nội tại' và' phần mở rộng tùy chọn'. –