マクロを使用している要素に対するタイプクラス操作を展開します
-
21-12-2019 - |
質問
次の設定を想定しています。
trait A[L] { def op(l1:L, l2:L): L }
trait E[L] { def op(l:L): L }
implicit def some2E[L:A](self:L) = new E[L] { def op(other:L) =
implicitly[A[L]].op(self,other) }
.
m op n
をa.op(m,n)
に直接展開する方法は、マクロを使用して、少なくとも追加のオブジェクト作成を避けますか?
解決
暗黙のパラメータをop
メソッドに移動すると、値クラスを使用して追加のオブジェクト作成を防ぐことができます。
implicit class some2E[L](val self: L) extends AnyVal {
def op(other: L)(implicit x: A[L]) = x.op(self, other)
}
.
HotSpotはおそらくop
で定義されているsome2E
への呼び出しをインラインにインラインします。
所属していません StackOverflow