7

我正在使用 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]

add但是和中存在类型不匹配get

Test.add(1)
// ...

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

4

1 回答 1

23

问题是您正在使用 and 方法隐藏 trait 的T类型add参数get有关该问题的更多详细信息,请参见我的答案。

这是正确的代码:

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的第 5.4 节以解释为什么单独在这里不起作用。with

于 2012-12-24T16:54:28.333 回答