Une idée de tacit programming consiste à ne pas appliquer d'arguments aux fonctions si cela peut être évité. Pourquoi F # n'autorise-t-il pas cette compilation si les fonctions sont des membres de première classe?Implémenter l'interface F # via la programmation tacite
Pourquoi?
type IAdder =
interface
abstract member Add : int -> int -> int
end
type Adder =
interface IAdder with
member this.Add x y = x + y
type AdderWithInnerAdder(adder:IAdder) =
interface IAdder with
member this.Add = adder.Add
Je reçois l'erreur de compilation ...
Aucune propriété abstraite a été trouvé qui correspond à cette dérogation
Je pense que cela devrait compiler. adder.Add
implémente clairement IAdder.Add
et devrait être acceptable.
J'aime qu'il ya une façon plus fonctionnelle d'aborder ce sujet. La contrainte est que je dois interopérer avec du code écrit en C#. Merci pour votre réponse. – t3dodson
@ t3dodson Si vous avez besoin d'interopérer avec C#, alors les arguments au curry devraient probablement être évités dans vos interfaces. Travailler avec 'FSharpFunc's en code C# ne va pas créer une expérience idiomatique. – TheInnerLight
@TheInnerLight, Ils ont seulement l'air curry du côté F #. Les fonctions membres et les fonctions let-bound sont compilées avec des méthodes normales sans tenir compte de l'exécution. –