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

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 に答える