j'ai besoin de mettre en œuvre une méthode d'extension statique supportant les contraintes membres sur certains types primitifs de base comme les entiers, flottants, etc. Voici mon code pour des entiers signés:méthodes d'extension statique supportant les contraintes membres
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
Code d'essai:
open MyOperators
let x = foo 5 // x should be 7
Mais compilateur se plaint avec l'erreur:
The type 'System.Int32' does not support any operators named 'Foo'
W Quel est le chapeau qui me manque ici? Merci!
Si je vous comprends bien, je pense que même si vous pouvez le faire, ce n'est pas une très bonne idée. Bricoler avec les mécanismes du langage de base m'a toujours frappé comme un anti-pattern. Pensez au fait que quelqu'un d'autre que vous devra peut-être travailler sur ce code à un moment donné dans le futur. Vous devrez peut-être même conserver ce code à un moment donné dans le futur lorsque vous ne l'avez pas travaillé pendant un certain temps. Des modifications aux types intrinsèques peuvent conduire à plusieurs "WTF?" des moments. –