ho bisogno di implementare un metodo di estensione statica di supporto vincoli membri su alcuni tipi primitivi di base come numeri interi, galleggianti, ecc Ecco il mio codice per gli interi firmati:metodi statici di estensione che supportano vincoli membri
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
Codice di prova:
open MyOperators
let x = foo 5 // x should be 7
Ma compilatore si lamenta con l'errore:
The type 'System.Int32' does not support any operators named 'Foo'
W cappello mi manchi qui? Grazie!
Se sto capendo correttamente, penserei che anche se è possibile farlo, non è un'idea particolarmente buona. Armeggiare con meccanismi linguistici di base mi ha sempre colpito come anti-modello. Pensa al fatto che qualcuno oltre a te potrebbe dover lavorare su questo codice in futuro. Potresti anche dover mantenere questo codice da solo in un momento futuro in cui non ci hai lavorato per un po '. Le modifiche a tipi intrinseci possono portare a diversi "WTF?" momenti. –