قم بتوسيع عمليات فئة الكتابة على العناصر باستخدام وحدات الماكرو

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 ل 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).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top