次のコードは、DSL のポリモーフィック埋め込みを模倣しようとしてInner
いますuseInner
。enclosing
ユーザーがインスタンスへの参照を保持するだけでよいように、メソッドを追加しましたInner
が、常にそれを囲むインスタンスを取得できます。これによりInner
、特定のインスタンスのすべてのインスタンスOuter
が 1 つの動作のみにバインドされます (ただし、ここでは必要です)。
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
のインスタンスからのインスタンスを引数として期待することだと私には思えます。Inner
Outer
この問題の本当の説明と解決方法は何ですか?