2014-11-20 21 views
5

Bazı sınıf yöntemlerini kapsüllenmiş nesneye dolaylı olarak iletme olasılığı var mıdır?Kapsüllenmiş nesneye yönelik Scala iletme veya temsilci yöntemleri

case class Entity(id: Int, name: String,) { 
    private lazy val lastScan = new LastScan 

    def getLastScanDate = lastScan.getLastScanDate 
    def updateLastScanDate = lastScan.updateLastScanDate 
} 

Sadece sarılı nesneye yöntemleri iletmek için def updateLastScanDate = lastScan.updateLastScanDate oluşturarak kaçınmak istiyorum.

cevap

1

Düz dilde bu mümkün değildir. Bu otomatik delegasyona ulaşmak için Kevin Wright tarafından derleyici eklentisi kullanılırdı.

Autorproxy "Rebooted" sürümü üzerinde çalışıyor gibi görünüyor, bu da makro tabanlı, projenize dahil edilmesini kolaylaştırıyor. Burada test kaynaklarından bir örnek yapıyorum:

trait Bippy { 
    def bippy(i : Int): String 
} 

object SimpleBippy extends Bippy { 
    def bippy(i: Int) = i.toString 
} 

@delegating class RawParamWrapper(@proxy pivot: Bippy) 
val wrapper = new RawParamWrapper(SimpleBippy) 
assert(wrapper.bippy(42) == "42") 
İlgili konular