在Scala中有一种更好的表达以下继承的方法吗?

时间:2011-08-28 13:23:13

标签: scala

在我的基类中我有

  trait EventReceiver  {

    def onStart(start: Start) {

    }

  }

我定义

  def benchmark = new EventReceiver {}

因为我需要在基类中进行一些处理。在我的客户使用的子类中,他们执行类似于以下的操作

override def benchmark = new EventReceiver {
    override def onStart(start: Start) {
      println("benchmark start")
    }
}

我认为这个位有点笨重

override def benchmark = new EventReceiver { ...

有更好的表达方式吗?理想情况下它会像

singleword {
    override def onStart(start: Start) {
      println("benchmark start")
    }
}

2 个答案:

答案 0 :(得分:7)

例如,

def singleword(fOnStart: Start => Unit) =
  new EventReceiver {
    override def onStart(start: Start) { fOnStart(start) }
  }

然后,

singleword { start =>
  println("benchmark started")
}

答案 1 :(得分:1)

如果您的EventReceiver除了提供单个def之外没有做任何其他事情,则可以 单个功能。

object Base {
   def singleWord(receiver: Start => Unit) = new Base {
      override def benchmark = receiver
   }
}

abstract class Base {
   def benchmark: (Start => Unit)
}

现在您可以像这样实例化子类的实例:

import Base._
val subInstance = singleWord { start =>
   println("benchmark" + start)
}

如果EventReceiver确实提供了更多功能,您仍然可以使用此构造,但“库”中的代码会变得更加丑陋。它会起作用。