varargs 方法的 Scala 类型边界

标签 scala types variadic-functions

我有以下基类:

trait Foo
abstract class Bar[A <: Foo](f : A*) extends Foo

然后我想创建一个子类:
case class Baz(f : Foo*) extends Bar(f)

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

inferred type arguments [Seq[Foo]] do not conform to class Bar's type parameter bounds [A <: Foo]



向 Bar 添加显式类型参数,如
case class Baz(f : Foo*) extends Bar[Foo](f)

然后提示类型不匹配 - 在需要 Foo 时找到了 Foo*。

这是什么原因造成的?我该如何解决?

最佳答案

如上所写,编译器需要一系列以逗号分隔的 Foo 类型的实例。作为 Bar ctor 的参数, 而它被赋予一个类型 Foo* 的单个实例, 翻译成 Seq[Foo]幕后。

做这个:

case class Baz(f : Foo*) extends Bar[Foo](f: _*)

这就是重复参数在所有方法之间传递的方式,而不仅仅是 ctors。
下面的也将起作用:
case class Baz(f : Foo*) extends Bar(f: _*)

关于varargs 方法的 Scala 类型边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4279868/

相关文章:

scala - 仅在 Play 中显示生产中的自定义错误页面

c++ - Push_back 可变函数参数转换为 vector ?

c - 如何在不使用 vsscanf() 的情况下为 C sscanf() 实现包装函数

scala - anorm的Pk的目的是什么?

java - 在不知道类型的情况下读取文件

C++需要一个容器来存储用户定义的函数

scala - Ga特林 - Scala - 每个并发用户的随机字符串

java - 无法获取嵌套对象层次结构中类型的简单名称

Scala 避免返回,同时仍然缩短迭代

mysql - Go SQL 驱动程序获取接口(interface){}列值