引用对象定义中的对象类型

时间:2013-07-29 02:50:29

标签: scala generics


注意:第一个示例有效。它显示了我想要的东西。第二个例子显示我想要在没有样板的情况下声明它但未能这样做。


我只是想做一件简单的事情:

trait SelfTest[T <: SelfTest[T]] {_ : T =>
  def get : T = this
}
class Test extends SelfTest[Test]
object Test extends Test

但没有样板类定义。像这样:

trait SelfTest[T <: SelfTest[T]] {_ : T =>
  def get : T = this
}
object Test extends SelfTest[Test.type]

但这种方式被scala(illegal cyclic reference involving object Test)拒绝。是否有像#符号的魔法来表示创建的对象?

1 个答案:

答案 0 :(得分:0)

这适用于scala 2.10 console ::

scala> trait SelfTest[T<:SelfTest[_]] {_: T => def get:T = this }
defined trait SelfTest

scala> class Test extends SelfTest[Test]
defined class Test

scala> case object t extends Test
defined module t

scala> t.get
res1: Test = t