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



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

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

反对这种方法的理由是什么?

new Outer { self =>
  new Inner(self) {
  }
}
class Outer {
}
class Inner[A](outerClass:A) {
  println("CLASS: " + outerClass.getClass)
}

可以使用隐式很容易地做到这一点(我假设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是有用的,但要确保你(或API的用户)实际上首先需要它!

相关内容

  • 没有找到相关文章

最新更新