Eine Idee von tacit programming ist, Argumente nicht auf Funktionen anzuwenden, wenn dies vermieden werden kann.Implementierung der F # -Schnittstelle über Tacit-Programmierung
Warum erlaubt F # dies nicht zu kompilieren, wenn Funktionen Mitglieder erster Klasse sind?
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
ich die Kompilierungsfehler erhalten ...
Keine Zusammenfassung Eigenschaft wurde festgestellt, dass
ich, dass diese kompilieren sollten das Gefühl zu dieser Überschreibung entspricht. adder.Add
implementiert eindeutig IAdder.Add
und sollte akzeptabel sein.
Ich mag, dass es eine funktionelle Art und Weise, dies zu nähern. Die Bedingung ist, dass ich mit in C# geschriebenem Code interoperieren muss. Danke für deine Antwort. – t3dodson
@ t3dodson Wenn Sie mit C# interop müssen, dann sollten curried Args wahrscheinlich auch in Ihren Schnittstellen vermieden werden. Die Arbeit mit 'FSharpFunc's in C# -Code wird nicht für eine idiomatische Erfahrung sorgen. – TheInnerLight
@TheInnerLight, Sie sehen nur von F # Seite curried. Member-Funktionen und Let-gebundene Funktionen werden unabhängig vom Curry zu normalen Methoden kompiliert. –