現在、具体化者は、具体化されているブロック内で定義されたものを参照する型を具体化する方法を認識していません。したがって、エラー。
しかし、それはあなたの例と何の関係がありますか? 仕組みは次のとおりです。
コード ブロックを具体化するために、コンパイラはdef apply[T: AbsTypeTag](mirror: MirrorOf[self.type], treec: TreeCreator): Expr[T]
(upd. in 2.10.0-RC1 AbsTypeTag
has been renamed to WeakTypeTag
) を使用して、式を具体化する Expr 型のオブジェクトを作成します。ただし、Expr のコントラクトには、reifee の型もキャプチャすることが暗示されているため、問題が発生します。
したがって、回避策が必要です。最も単純な方法O
は、スニペットの最後の行で具体化可能なものにキャストすることです (例: write ) O.asInstanceOf[Object]
。asInstanceOf
次に、結果からパーツを手動で取り除くことができます。
scala> reify { object O; O }
<console>:26: error: implementation restriction: cannot reify type Object{def <init>(): O.type} (ClassInfoType)
reify { object O; O }
^
scala> reify { object O; O.asInstanceOf[Object] }
res1 @ 2d059fd6: reflect.runtime.universe.Expr[Object] =
Expr[java.lang.Object]({
object O extends AnyRef {
def <init>() = {
super.<init>();
()
}
};
O.asInstanceOf[Object]
})