سؤال

لقد كتبت سمة مخصصة تمد ITerator [A] وأود أن أكون قادرًا على استخدام الأساليب التي كتبتها على Iterator [A] والتي يتم إرجاعها من طريقة أخرى. هل هذا ممكن؟

trait Increment[+A] extends Iterator[A]{
    def foo() = "something"
}

class Bar( source:BufferedSource){
    //this ain't working
    def getContents():Increment[+A] = source getLines
}

ما زلت أحاول الحصول على رأسي حول شيء ضمني كل شيء وعدم وجود الكثير من كتابة طريقة في Bar تعريف الكائن. كيف سأقوم بتفكيك مثل هذا العنصر للعمل بالطريقة التي أود أعلاه؟

هل كانت مفيدة؟

المحلول

اكتشفه. أخذني بعض المحاولات لفهم:

object Increment{
    implicit def convert( input:Iterator[String] ) = new Increment{
        def next() = input next
        def hasNext() = input hasNext
    }
}

وقد انتهيت. قصيرة جدا بشكل مثير للدهشة.

نصائح أخرى

لا أعتقد أن هذا ممكن دون لعب الحيل. يحدث ميراث Mixin في وقت الترجمة ، عندما يمكن فحصه بشكل ثابت ، ويستهدف دائمًا فئة أخرى ، سمة ، إلخ

هناك حلول مثل التحويلات الضمنية ، أو ربما الوكلاء. من المحتمل أن تكون الطريقة "الأنظف" هي جعل الفئة المربعة التي تفوضها إلى مؤلف أساسي. اعتمادًا على حالة الاستخدام الخاصة بك ، قد يكون هناك حلول أخرى.

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