【问题标题】:Scala forward or delegate methods to encapsulated objectScala 将方法转发或委托给封装对象
【发布时间】:2015-01-18 02:10:29
【问题描述】:

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

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 只是为了将方法转发到包装对象。

【问题讨论】:

    标签: scala delegates forward-declaration delegation


    【解决方案1】:

    用简单的语言这是不可能的。 Kevin Wright 曾经有一个编译器插件来实现这种自动委托。

    现在他似乎正在开发基于宏的Autorproxy "Rebooted" 版本,可以直接将其包含在您的项目中。我在此处粘贴其测试来源的示例:

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

    【讨论】:

      猜你喜欢
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多