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)
| 归档时间: |
|
| 查看次数: |
7225 次 |
| 最近记录: |