编译器允许隐式变量,但似乎没有办法隐式地提供它们

时间:2013-10-07 12:47:28

标签: scala

以下编译:

def test(x:String)(implicit s:String *) = ???

但是,我似乎无法提供隐式s

def test2(x:String)(implicit s:String *) =
  test(x) // could not find implicit value for parameter s: String*

我是否遗漏了某些东西,或者编译器是否会抛出异常?

1 个答案:

答案 0 :(得分:1)

这是因为在方法体内部,var-args参数被视为Seq[A]而不是特殊类型A*。您可以再次显式扩展序列:

def test2(x:String)(implicit s:String*) = test(x)(s: _*)

由于您无法将类型定义为String*,因此它会使隐式案例无用,但是:

implicit val a = Seq("hallo", "gallo"): _*

// error: no `: _*' annotation allowed here

所以你需要使用Seq[String]