Scala向封装对象转发或委托方法

Scala向封装对象转发或委托方法,scala,delegates,forward-declaration,delegation,Scala,Delegates,Forward Declaration,Delegation,是否有可能将某些类方法隐式转发给封装的对象 case class Entity(id: Int, name: String,) { private lazy val lastScan = new LastScan def getLastScanDate = lastScan.getLastScanDate def updateLastScanDate = lastScan.updateLastScanDate } 我希望避免创建def updateLastScanDate=

是否有可能将某些类方法隐式转发给封装的对象

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

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

我希望避免创建
def updateLastScanDate=lastScan.updateLastScanDate
只是为了将方法转发到包装对象。

在普通语言中,这是不可能的。Kevin Wright曾经有一个编译器插件来实现这种自动委托

他现在似乎正在开发一个基于宏的版本,使其直接包含在您的项目中。我在这里粘贴了一个来自其测试源的示例:

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