¿Cómo funciona este tipo de anotación y por qué el otro no?
Por favor explique la magia detrásdrawShape
función. 1) ¿Por qué funciona? Me refiero a cómo llama alDraw
miembro, 2) por qué tiene que serinline
?
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
Y el siguiente problema es: ¿es posible escribirdrawShape
funciona usando la anotación de tipo de parámetro como a continuación? Descubrí que tiene exactamente la misma firma que la primera, pero no puedo completar el cuerpo.
let inline drawShape2 (shape : ^a when ^a : (member Draw : unit->unit)) =
...
Gracias por adelantado.