1

scala 言語では、クラスの暗黙のスコープは実行時に消去されます。たとえば、次のように定義した場合です。

case class A(i: Int)

object A {

  implicit def toInt(a: A) = a.i
}

次に、配列の場合:

val arr = Array[Any](A(1), 2)

書くことは不可能です:

arr.map(_ + 3)

タイプ A として、その暗黙のスコープは Array[Any] に挿入された後に削除されます。

これにより、一部のデザイン パターン (型クラス ルックアップなど) を実行時に適用できなくなります (型情報がまだ部分的に利用可能である場合)。私の場合、上記のプログラムを、型マッチングで A を明示的に記述せずに書きたいと思います (実際には、A のようなクラスの数は数え切れないほどあります)。1 つのプロジェクトでこれを実行できる scala メタプログラミング パッケージ (scalameta を推奨) はありますか? Java ランタイム バイトコードに「ランタイム クラスの暗黙的なものを探し、見つからない場合は別のことを行う」ように指示するにはどうすればよいですか?

4

0 に答える 0