Scala,使用通用特征扩展对象

时间:2012-12-24 16:33:25

标签: scala singleton extend type-mismatch traits

我正在使用Scala,我想扩展一个具有特征的(单例)对象,它提供了一个数据结构和一些方法,如下所示:

trait Tray[T] {
  val tray = ListBuffer.empty[T]

  def add[T] (t: T) = tray += t
  def get[T]: List[T] = tray.toList
}

然后我想把这个特性混合成一个对象,就像这样:

object Test with Tray[Int]

addget中存在类型不匹配:

Test.add(1)
// ...

我怎样才能让它发挥作用?或者我的错误是什么?

1 个答案:

答案 0 :(得分:20)

问题在于,您使用Tadd方法上的get隐藏了特征的类型参数。有关此问题的详细信息,请参阅我的回答here

这是正确的代码:

trait Tray[T] {
  val tray = ListBuffer.empty[T]

  def add (t: T) = tray += t      // add[T] --> add
  def get: List[T] = tray.toList  // get[T] --> add
}

object Test extends Tray[Int]

请注意在对象定义中使用extends - 请参阅the spec的第5.4节,以解释为什么with单独无效。