Tôi có hàm tổng quát này trong F # có sử dụng (-) điều hành:Điều Hành (-) được sử dụng trong F # tăng phương pháp chỉ định không được hỗ trợ ngoại lệ từ C#
let inline sub a b = a - b
Bây giờ tôi gọi chức năng này từ C#:
int a = sub<int, int, int>(4, 1);
Điều này đặt ra một lỗi:
Unhandled Exception: System.NotSupportedException: Specified method is not supported. at ProjA.MainClass.Main (System.String[] args) [0x00000] in <4f209fa43741462db3b8f73ac83c35a2>:0 [ERROR] FATAL UNHANDLED EXCEPTION: System.NotSupportedException: Specified method is not supported. at ProjA.MainClass.Main (System.String[] args) [0x00000] in <4f209fa43741462db3b8f73ac83c35a2>:0
Xin lưu ý rằng điều này làm việc tốt cho (+) nhà điều hành hoặc không có từ khóa nội tuyến.
1) Tôi có đang làm điều gì sai hoặc đây có phải là lỗi không?
2) Có cách nào để khắc phục vấn đề này không (nhưng tôi cần từ khóa nội tuyến để thực hiện chức năng này chung)?
3) Bạn đã trải nghiệm điều gì đó tương tự khi gọi hàm f # từ C#, bạn đã giải quyết nó như thế nào?
Tôi đang sử dụng Mono 4.8 trên macOS Sierra.
@EJoshuaS Trình biên dịch tự thực thi ba tham số, một tham số cuối cùng cho kiểu trả về. Loại đối số không thể được suy ra tự động bởi trình biên dịch. Như tôi đã đề cập, điều kỳ lạ là khi tôi thay đổi (-) thành (+) mọi thứ hoạt động tốt mà không có ngoại lệ. – mateuszlewko
Có, xin vui lòng bỏ qua bình luận trước đây của tôi, tôi thấy rằng một khi tôi đã thử nó bản thân mình. Tôi hơi ngạc nhiên bởi loại hành vi đó (tôi đã thấy chính xác điều tương tự trên máy của tôi). Dường như từ khóa "inline" [có thể hơi lạ] (http://stackoverflow.com/questions/4413324/how-does-f-inline-work) khi gọi từ C# đến F # - trên thực tế, khi tôi xóa chức năng nội tuyến nó hoạt động chính xác - nhưng tôi hơi bối rối về lý do tại sao điều này sẽ làm việc cho "+" nhưng không phải "-". Tôi thực sự thực sự muốn thấy một lời giải thích cho lý do tại sao điều này là quá nếu ai đó biết. – EJoshuaS
Tôi sẽ ngạc nhiên rằng điều này thậm chí hoạt động - Tôi nghi ngờ rằng bạn có lẽ là shadowing định nghĩa của cái gì khác nếu bạn sử dụng +. Đối với nội tuyến, trình biên dịch F # không thực sự tạo ra một hàm, nó chỉ tạo ra một số siêu dữ liệu mà nó có thể sử dụng.Thực tế là trình biên dịch C# thấy nó ở tất cả là do đó đáng ngạc nhiên –