用于varargs方法的Scala类型边界

Sub*_*oid 4 types scala variadic-functions

我有以下基类:

trait Foo
abstract class Bar[A <: Foo](f : A*) extends Foo
Run Code Online (Sandbox Code Playgroud)

我想创建一个子类:

case class Baz(f : Foo*) extends Bar(f)
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,编译器会感到沮丧,告诉我:

推断类型参数[Seq [Foo]]不符合类Bar的类型参数边界[A <:Foo]

向Bar添加显式类型参数,如

case class Baz(f : Foo*) extends Bar[Foo](f)
Run Code Online (Sandbox Code Playgroud)

然后抱怨类型不匹配 - 当需要Foo时发现Foo*.

是什么导致了这个?我应该如何解决这个问题?

axe*_*l22 7

如上所述,编译器期望一系列Foo以逗号分隔的类型实例作为ctor的参数Bar,而它被赋予一个类型的单个实例Foo*,它被转换为Seq[Foo]场景后面.

做这个:

case class Baz(f : Foo*) extends Bar[Foo](f: _*)
Run Code Online (Sandbox Code Playgroud)

这是在所有方法之间传递重复参数的方式,而不仅仅是ctors.以下将适用:

case class Baz(f : Foo*) extends Bar(f: _*)
Run Code Online (Sandbox Code Playgroud)