参考Scala中内部类的类型

Alb*_*ard 13 types scala inner-classes

下面的代码试图模仿DSL的多态嵌入:它不是给出行为Inner,而是在useInner其封闭类的方法中编码.我添加了enclosing方法,以便用户只需保留对Inner实例的引用,但始终可以获取其封闭的实例.通过这样做,Inner来自特定Outer实例的所有实例仅绑定到一个行为(但这里需要它).

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

它没有编译和scala 2.8抱怨:

type mismatch; found: sandbox.Outer#Inner
               required: _81.Inner where val _81:sandbox.Outer
Run Code Online (Sandbox Code Playgroud)

Scala编程:嵌套类Scala:Inner Classes之旅,在我看来,问题是useInner期望作为参数Inner来自特定Outer实例的实例.

什么是真正的解释以及如何解决这个问题?

Tho*_*ung 16

我认为Inner类型就像this.Inner类型.外#Nend是独立于外部实例(不是路径依赖类型).

abstract class Outer {
  sealed class Inner {
    def enclosing = Outer.this
  }
  def useInner(x:Outer#Inner) : Boolean
}

def toBoolean(x:Outer#Inner) : Boolean = x.enclosing.useInner(x)
Run Code Online (Sandbox Code Playgroud)