在我的基类中我有
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")
}
}
答案 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确实提供了更多功能,您仍然可以使用此构造,但“库”中的代码会变得更加丑陋。它会起作用。