Câu hỏi của tôi có liên quan đến vấn đề này - Functions with generic parameter types - nhưng tôi hoàn toàn không thể biết cách làm những gì tôi muốn.F #: Chức năng quá tải
Tôi muốn xác định một 'hậu duệ chức năng để quấn cuộc gọi đến 'hậu duệ' trên C# lớp học khác nhau như vậy:
để con cháu tên (XDocument: XDocument) = xDocument.Descendants tên
để con cháu name (xElement: XElement) = xElement.Descendants name
Cách tiếp cận này không hiệu quả vì chúng tôi có định nghĩa trùng lặp về 'hậu duệ'.
Tôi nghĩ rằng nó sẽ có thể tận dụng các chức năng nội tuyến và tĩnh giải quyết các thông số để xác định các phương pháp sau đây để làm điều này thay vì:
let inline descendants name (xml : ^x when ^x : (member Descendants : XName -> seq<XElement>)) =
xml.Descendants name
Nhưng tôi nhận được lỗi này khi cố gắng để làm điều đó :
Tra cứu đối tượng không xác định loại dựa trên thông tin trước điểm chương trình này. Một chú thích kiểu có thể cần thiết trước điểm chương trình này để hạn chế loại đối tượng. Điều này có thể cho phép tra cứu được giải quyết.
Có cách nào để tôi có thể viết hàm thứ hai đó để làm những gì tôi muốn không?
Ah Tôi đã không nhận ra rằng quá tải chỉ làm việc cho các thành viên thực sự, rõ ràng là không đọc bài đăng khác đủ chặt chẽ! Cũng không nhận được rằng cả hai đều thừa hưởng từ XContainer vì vậy cảm ơn, đó là một giải pháp tốt hơn nhiều –
Tôi đã thử quá tải bình thường thực sự và trình biên dịch nói rằng có 2 thành viên được gọi là 'Hậu duệ' với cùng số đối số –
Trong một số trước đó phiên bản, F # compiler yêu cầu '[]' được sử dụng khi quá tải, nhưng tôi không chắc chắn trong phiên bản này đã được gỡ bỏ mặc dù ... Tôi chỉ cần thử ví dụ đơn giản trong F # RC (hai phương pháp , cả hai với hai đối số) và nó hoạt động tốt (không có 'OverloadID'). –