通用参数的空列表

Dan*_*iel 1 f#

规范的第15.3节提到了< >具有插入空白的序列是允许的形式.它表示一个通用参数的空列表,它允许以下奇怪.

type A() = class end
let a = new A< >()
Run Code Online (Sandbox Code Playgroud)

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

kvb*_*kvb 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")
Run Code Online (Sandbox Code Playgroud)

如果不仔细考虑重载决策,那么类型的含义并不一定明显t,但它完全清楚了什么类型t't''拥有.