Почему вывод типа F # не работает для класса или интерфейса? - PullRequest
0 голосов
/ 25 апреля 2019

Вывод типа F # работает только для типов, связанных с F #, за исключением класса или интерфейса. Но я не знаю почему. Я понимаю, что кандидаты увеличатся, но это невозможно? Есть ли другие причины?

1 Ответ

1 голос
/ 25 апреля 2019

Во многих случаях просто невозможно определить тип объекта. Самый простой случай - что-то вроде:

type A () = member x.bar () = ()
type B () = member x.bar () = ()

let foo x = x.bar () // Is x A or B?

Компилятор делает все возможное, поэтому, если он знает, какой тип во время использования, он с радостью позволит вам пропустить аннотации:

type A () = member x.bar () = ()
type B () = member x.bar () = ()
let blah (x: A) = x.bar () 

let foo x =
   blah x
   x.bar () // x is known to be A thanks to above line

Более подробное обсуждение можно найти в моем старом вопросе здесь: Почему вывод типов нецелесообразен для объектно-ориентированных языков?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...