2

これは最も正しい用語ではないかもしれませんが、ボックス化された型とBox[T]は type のことTです。箱入りOption[Int]も同様Intです。

これらのタイプを抽出するにはどうすればよいでしょうか? 私の素朴な試み:

//extractor
type X[Box[E]] = E //doesn't compile. E not found

//boxed
type boxed = Option[Int]

//unboxed
type parameter = X[boxed] //this is the syntax I would like to achieve
implicitly[parameter =:= Int] //this should compile

これを行う方法はありますか?Apocalisp ブログを除けば、Scala での型レベルのメタプログラミングに関する指示を見つけるのに苦労しています。

4

1 に答える 1

2

2つの状況しか想像できません。型パラメーターを使用する場合、たとえばメソッドへの引数としてそのような高次の型を使用する場合、その型パラメーターがメソッドジェネリックで複製されます。

trait Box[E]

def doSomething[X](b: Box[X]) { ... } // parameter re-stated as `X`

または型メンバーがある場合は、インスタンスごとにそれらを参照できます。

trait Box { type E }

def doSomething(b: Box) { type X = b.E }

...または一般的に

def doSomething(x: Box#E) { ... }

したがって、実際に達成したいことに関して質問を書き直す必要があると思います。

于 2012-08-23T15:21:53.057 に答える