2014-11-20 26 views
5

Esiste la possibilità di inoltrare implicitamente alcuni dei metodi di classe all'oggetto incapsulato?Scala avanti o delegare metodi a oggetto incapsulato

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

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

voglio evitare di creare def updateLastScanDate = lastScan.updateLastScanDate solo di trasmettere metodi per oggetto avvolto.

risposta

1

In linguaggio semplice ciò non è possibile. C'era un plugin per compilatore di Kevin Wright per ottenere questa delega automatica.

Sembra che stia lavorando su una versione Autorproxy "Rebooted" che ora è basata su macro, rendendola semplice da includere nel progetto. Sto incollando qui un esempio dalle sue fonti di test:

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")