鉴于:
scala> def f(x: Any*): String = "Foo" f: (x: Any*)String
我的理解是它将需要1个或多个参数Any
,然后返回"Foo"
.
scala> f(1, 2, List(4), "foo") res5: String = Foo scala> f(null) res6: String = Foo
但是,然后我传入了更高级的类型:
scala> f(Option) res7: String = Foo
...但我希望编辑后编译时失败- 我认为它是一个类型构造函数.
为什么f(Option)
工作,即输出"Foo"
?
这不是一个类型构造函数,在这种情况下var args没有什么特别之处.它是的伴侣Option
.如果f
在类型参数上创建泛型A
,则可以看到Option.type
(Option
s伴随对象的类型)是推断的.
scala> def f[A](a: A) = a f: [A](a: A)A scala> f(Option) res1: Option.type = scala.Option$@59f95c5d