Wie funktioniert diese Typanmerkung und warum funktioniert die andere nicht?
Bitte erklären Sie die Magie hinterdrawShape
Funktion. 1) Warum es überhaupt funktioniert - ich meine, wie es das @ nenDraw
member, 2) warum es sein mussinline
?
type Triangle() =
member x.Draw() = printfn "Drawing triangle"
type Rectangle() =
member x.Draw() = printfn "Drawing rectangle"
let inline drawShape (shape : ^a) =
(^a : (member Draw : unit->unit) shape)
let triangle = Triangle()
let rect = Rectangle()
drawShape triangle
drawShape rect
Und die nächste Ausgabe ist - ist es möglich zu schreibendrawShape
-Funktion mit Parametertyp-Annotation wie unten? Ich habe festgestellt, dass es genau die gleiche Signatur hat wie das erste, aber ich kann den Körper nicht vervollständigen.
let inline drawShape2 (shape : ^a when ^a : (member Draw : unit->unit)) =
...
Danke im Voraus