通用参数的空列表

时间:2011-09-26 14:32:37

标签: f#

Section 15.3 of the spec提到序列< >,其间插入空格是一种允许的形式。它表示一个空的通用参数列表,它允许以下奇怪。

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

为什么允许这样做?由于泛型类型可以在省略类型args的情况下实例化,这是一种类型检查排序的优化吗?

2 个答案:

答案 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< >