Пустой список общих аргументов - PullRequest
1 голос
/ 26 сентября 2011

В разделе 15.3 спецификации упоминается последовательность < > с пробелами, являющимися разрешенной формой.Он указывает пустой список общих аргументов, который допускает следующую странность:

type A() = class end
let a = new A< >()

Почему это разрешено?Поскольку универсальные типы могут быть созданы с опущенными аргументами типов, это своего рода оптимизация проверки типов?

Ответы [ 2 ]

5 голосов
/ 26 сентября 2011

Я согласен с Рамоном, что это делает вещи более непротиворечивыми, поскольку вы можете рассматривать неуниверсальные типы как вырожденный случай типов универсальной арности 0. В случае типов, которые «перегружены» универсальной арностью, это позволяетВы должны быть более точными в отношении того, к какому типу вы обращаетесь:

type T(o:obj) = class end
type T<'t>(t:'t) = class end

let t = T("test")
let t' = T< >("test")
let t'' = T<_>("test")

Не вдаваясь в подробности о разрешении перегрузки, не обязательно очевидно, какой тип t имеет, но совершенно ясно, какие типы t'и t'' есть.

2 голосов
/ 26 сентября 2011

Я думаю, что это просто для последовательности. Вы можете сделать List<int> и Dictionary<string, bool>, так что вы также можете сделать int< >.

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