Scala:在构造函数中从内部类获取外部类

时间:2016-09-22 13:54:09

标签: scala scala-reflect scala-implicits

我有一个匿名内部类,我想在构造函数中访问它的(匿名)外部类。所以我想实现这个方法:

new Outer {
  new Inner {

  }
}

class Outer {

}

class Inner {
  def outerClass: Outer = ???
}

2 个答案:

答案 0 :(得分:2)

什么反对这种做法?

new Outer { self =>
  new Inner(self) {

  }
}

class Outer {
}

class Inner[A](outerClass:A) {
  println("CLASS: " + outerClass.getClass)
}

答案 1 :(得分:1)

可以使用implicits来做到这一点(我假设OuterInner都可以修改,但使用它们的代码看起来应该像问题一样)。声明:

class Outer {
  implicit def o: Outer = this
}

class Inner(implicit val outerClass: Outer) {
}

用法:

new Outer {
  new Inner {
    // can use outerClass here
  }
}

new Outer {
  val inner = new Inner {

  }

  // inner.outerClass
}

我可以想象这对DSL有用,但请确保你(r的API用户)真正想要它!