6

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


我只想得到简单的东西:

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) 拒绝了。有没有类似#符号来表示创建的对象?

4

1 回答 1

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
于 2013-10-12T19:57:15.323 回答