【发布时间】:2011-01-12 03:22:53
【问题描述】:
以下代码试图模仿Polymorphic Embedding of DSLs:而不是给出Inner 中的行为,而是在其封闭类的useInner 方法中进行编码。我添加了enclosing 方法,以便用户只需要保留对Inner 实例的引用,但始终可以获得它们的封闭实例。通过这样做,来自特定Outer 实例的所有Inner 实例只绑定到一种行为(但这里需要它)。
abstract class Outer {
sealed class Inner {
def enclosing = Outer.this
}
def useInner(x:Inner) : Boolean
}
def toBoolean(x:Outer#Inner) : Boolean = x.enclosing.useInner(x)
它无法编译并且 scala 2.8 抱怨:
type mismatch; found: sandbox.Outer#Inner
required: _81.Inner where val _81:sandbox.Outer
从Programming Scala: Nested classes 和A Tour of Scala: Inner Classes 来看,在我看来,问题在于useInner 期望来自特定Outer 实例的Inner 实例作为参数。
什么是真正的解释以及如何解决这个问题?
【问题讨论】:
标签: scala types inner-classes