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

ayv*_*ngo 6 generics scala


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


我只想简单一点:

trait SelfTest[T <: SelfTest[T]] {_ : T =>
  def get : T = this
}
class Test extends SelfTest[Test]
object Test extends Test
Run Code Online (Sandbox Code Playgroud)

但没有样板类定义.像这样的东西:

trait SelfTest[T <: SelfTest[T]] {_ : T =>
  def get : T = this
}
object Test extends SelfTest[Test.type]
Run Code Online (Sandbox Code Playgroud)

但这种方式被scala(illegal cyclic reference involving object Test)拒绝了.是否有任何魔法像#标志来表示创建的对象?

Ash*_*ynd 0

这在 scala 2.10 控制台中有效::

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
Run Code Online (Sandbox Code Playgroud)