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 ランタイム バイトコードに「ランタイム クラスの暗黙的なものを探し、見つからない場合は別のことを行う」ように指示するにはどうすればよいですか?