Как работает аннотация этого типа, а почему нет?
Пожалуйста, объясните магиюdrawShape
функция. 1) Почему это работает вообще - я имею в виду, как это называетсяDraw
член, 2) почему это должно бытьinline
?
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
И следующий вопрос - можно ли написатьdrawShape
Функция с использованием аннотации типа параметра, как показано ниже? Я обнаружил, что у него точно такая же подпись, как у первой, но я не могу завершить тело.
let inline drawShape2 (shape : ^a when ^a : (member Draw : unit->unit)) =
...
Заранее спасибо.