매크로를 사용하여 요소에 대한 유형 클래스 작업 확장
-
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)
, 상황에 따라 a
적절한 암시적이다 A
, 매크로를 사용하거나 최소한 추가 객체 생성을 피하시겠습니까?
해결책
암시적 매개변수를 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
, 그래서 당신은 a.op(m, n)
.
제휴하지 않습니다 StackOverflow