Расширить операции класса типа на элементах с использованием макросов

StackOverflow https://stackoverflow.com//questions/24015040

Вопрос

Предполагая следующую настройку:

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 является подходящим неявным генеракодицетагкодом, используя макросы или, по крайней мере, избегать дополнительного создания объекта?

Это было полезно?

Решение

Если вы переместите неявный параметр в метод op, вы можете использовать класс значения для предотвращения создания дополнительного объекта:

implicit class some2E[L](val self: L) extends AnyVal {
 def op(other: L)(implicit x: A[L]) = x.op(self, other)
}
. Горячая точка

, вероятно, будет встроен на звонок на Theop, определенный в some2E, поэтому вы получите a.op(m, n).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top