我从库中扩展了一个抽象类,我希望覆盖一个函数定义,并使用超类的定义作为后备。
如果父类的方法被定义为PartialFunction,我可以使用orElse。由于它不是,我正在做下面的事情(将父函数解除为部分函数,因此我可以使用orElse)。它有效,但是当我怀疑有更好/更优雅的方式时,它就是其中之一。有吗?
abstract class ThingICantChange {
def test:Int=>String = {
case 1 => "one"
case 2 => "two"
case _ => "unknown"
}
}
class MyClass extends ThingICantChange {
def myChanges:PartialFunction[Int,String] = {
case 2 => "mytwo"
case 3 => "three"
}
override def test = myChanges orElse Function.unlift(x => Some(super.test(x)))
}
答案 0 :(得分:3)
我会这样做:
class MyClass extends ThingICantChange {
override def test: Int => String = {
case 2 => "mytwo"
case 3 => "three"
case x => super.test(x)
}
}
如果你想从super.test
构建一个部分函数,那么这里是一个干净的方法:
override def test = myChanges orElse PartialFunction(super.test)