将Type构造函数传递给`Any`类型的Var Args

时间:2016-01-05 20:11:49

标签: scala

假设:

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"

1 个答案:

答案 0 :(得分:6)

这不是一个类型构造函数,在这种情况下var args没什么特别之处。它是Option的伴侣对象。如果您对类型参数f进行A泛型,则可以看到推断出Option.typeOption的伴随对象的类型)。

scala> def f[A](a: A) = a
f: [A](a: A)A

scala> f(Option)
res1: Option.type = scala.Option$@59f95c5d