Как написать это ограничение элемента в F #?
Для типа
type Cow() =
class
member this.Walk () = Console.WriteLine("The cow walks.")
end
Я могу написать метод, который принудительно ограничивает член для метода Walk like
let inline walk_the_creature creature =
(^a : (member Walk : unit -> unit) creature)
// and then do
walk_the_creature (Cow())
В этом случае тип выводится. Я не могу явно написать ограничение на параметр существа, подобный этому
// Does not compile
// Lookup on object of indeterminate type based on information prior to this
// program point. A type annotation may be needed...
let inline walk_the_creature_2 (creature:^a when ^a:(member Walk : unit -> unit)) =
creature.Walk()
Что я делаю неправильно?
Ответы
Ответ 1
Он явно не пишет ограничения, которые являются проблемой, так что синтаксис не так хорош, что вы можете поместить ограничение члена в параметр, а затем вызвать элемент обычным способом. Тело walk_the_creature
и walk_the_creature2
будет здесь одинаковым:
let inline walk_the_creature_2 (creature:^a when ^a:(member Walk : unit -> unit)) =
(^a : (member Walk : unit -> unit) creature)