قم بتوسيع عمليات فئة الكتابة على العناصر باستخدام وحدات الماكرو
-
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)
}
من المحتمل أن تقوم نقطة الاتصال بتضمين المكالمة إلىop
المعرفة في some2E
, ، لذلك سوف ينتهي بك الأمر a.op(m, n)
.
لا تنتمي إلى StackOverflow