Section 15.3 of the spec提到序列< >
,其间插入空格是一种允许的形式。它表示一个空的通用参数列表,它允许以下奇怪。
type A() = class end
let a = new A< >()
为什么允许这样做?由于泛型类型可以在省略类型args的情况下实例化,这是一种类型检查排序的优化吗?
答案 0 :(得分:5)
我同意Ramon认为它使事情更加一致,因为你可以将非泛型类型视为泛型类型0的退化情况。对于通用arity“重载”的类型,这允许你要更明确地指出你所指的是哪种类型:
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''
类型已经完全清楚了。
答案 1 :(得分:2)
我认为这只是为了保持一致性。您可以执行List<int>
和Dictionary<string, bool>
,这样您也可以执行int< >
。