0

次の設定を想定しています。

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)か?aA

4

1 に答える 1

0

暗黙的なパラメーターをopメソッドに移動すると、値クラスを使用して追加のオブジェクトの作成を防ぐことができます。

implicit class some2E[L](val self: L) extends AnyVal {
 def op(other: L)(implicit x: A[L]) = x.op(self, other)
}

Hotspot はおそらくin でop定義されたへの呼び出しをインライン展開するsome2Eため、最終的には になりますa.op(m, n)

于 2014-06-03T20:12:49.367 に答える