Ampliar el tipo de clase de operaciones sobre los elementos de uso de los macros
-
21-12-2019 - |
Pregunta
Suponiendo la siguiente configuración:
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) }
Es allí una manera de ampliar directamente m op n
a a.op(m,n)
, en un contexto donde a
es el apropiado implícito A
, utilizar macros o al menos evitar el objeto adicional de la creación?
Solución
Si mueve el parámetro implícito a la op
método, usted puede utilizar un valor de la clase para evitar que el objeto adicional de la creación:
implicit class some2E[L](val self: L) extends AnyVal {
def op(other: L)(implicit x: A[L]) = x.op(self, other)
}
Hotspot probablemente en línea de la llamada a laop
se define en some2E
, por lo que acabará con a.op(m, n)
.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow