假设:
scala> def f(x: Any*): String = "Foo"
f: (x: Any*)String
我的理解是,它会占用任意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"
?
答案 0 :(得分:6)
这不是一个类型构造函数,在这种情况下var args没什么特别之处。它是Option
的伴侣对象。如果您对类型参数f
进行A
泛型,则可以看到推断出Option.type
(Option
的伴随对象的类型)。
scala> def f[A](a: A) = a
f: [A](a: A)A
scala> f(Option)
res1: Option.type = scala.Option$@59f95c5d