trzeba zaimplementować statyczną metodę rozszerzenia wspiera ograniczeń członków na kilka podstawowych typów pierwotnych, takich jak liczby całkowite, pływaków, itd. Tu jest mój kodu dla podpisanych liczb:statyczne metody przedłużania wspierające ograniczenia członków
module MyOperators =
let inline foo (x : ^T) = (^T : (static member Foo : ^T -> int) (x))
type System.Int32 with
static member Foo(x : Int32) = 7 // static extension
kod Test:
open MyOperators
let x = foo 5 // x should be 7
Ale kompilator narzeka z powodu błędu:
The type 'System.Int32' does not support any operators named 'Foo'
W. Czego tu mi brakuje? Dzięki!
Jeśli dobrze rozumiem cię, myślę, że nawet jeśli możesz to zrobić, nie jest to szczególnie dobry pomysł. Majstrowanie przy podstawowych mechanizmach językowych zawsze wydawało mi się anty-wzorcem. Pomyśl o tym, że ktoś oprócz Ciebie będzie musiał pracować nad tym kodem w pewnym momencie w przyszłości. Być może będziecie musieli nawet zachować ten kod w pewnym momencie w przyszłości, jeśli nie będziecie przez jakiś czas nad nim pracować. Modyfikacje typów wewnętrznych mogą prowadzić do kilku "WTF?" chwile. –