Scala 重写函数定义的更好方法

Scala 重写函数定义的更好方法,scala,Scala,我从一个库中扩展了一个抽象类,我想重写一个函数定义,并使用超类的定义作为回退 如果父类的方法被定义为PartialFunction,我可以使用orElse。因为它不是,所以我正在做下面的事情(将父函数取消升迁为部分函数,这样我就可以使用orElse)。它是有效的,但这是我怀疑有更好/更优雅的方法的时候之一。有吗 abstract class ThingICantChange { def test:Int=>String = { case 1 => "one"

我从一个库中扩展了一个抽象类,我想重写一个函数定义,并使用超类的定义作为回退

如果父类的方法被定义为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)))
}
我会这样做:

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)
我会这样做:

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)
我会这样做:

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)
我会这样做:

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)

对我应该澄清一下:我的代码比这更复杂(显然),我希望能够使用orElse编写多个分部函数。我可以创建一个默认的
def last:PartialFunction[Int,String]={case x=>super.test(x)}
并将其用作最终的orElse,但这似乎并不比我所做的更好。我只是觉得有一个与我的
函数相当的函数。unlift(x=>Some(super.test(x))
我还没有学会的愚蠢。更新了我的答案以反映你的目标。你看,我知道一定有更简单的方法!真不敢相信我没想到。谢谢。是的。。。我应该澄清一下:我的代码比这更复杂(显然),我希望能够使用orElse编写多个分部函数。我可以创建一个默认的
def last:PartialFunction[Int,String]={case x=>super.test(x)}
并将其用作最终的orElse,但这似乎并不比我所做的更好。我只是觉得有一个与我的
函数相当的函数。unlift(x=>Some(super.test(x))
我还没有学会的愚蠢。更新了我的答案以反映你的目标。你看,我知道一定有更简单的方法!真不敢相信我没想到。谢谢。是的。。。我应该澄清一下:我的代码比这更复杂(显然),我希望能够使用orElse编写多个分部函数。我可以创建一个默认的
def last:PartialFunction[Int,String]={case x=>super.test(x)}
并将其用作最终的orElse,但这似乎并不比我所做的更好。我只是觉得有一个与我的
函数相当的函数。unlift(x=>Some(super.test(x))
我还没有学会的愚蠢。更新了我的答案以反映你的目标。你看,我知道一定有更简单的方法!真不敢相信我没想到。谢谢。是的。。。我应该澄清一下:我的代码比这更复杂(显然),我希望能够使用orElse编写多个分部函数。我可以创建一个默认的
def last:PartialFunction[Int,String]={case x=>super.test(x)}
并将其用作最终的orElse,但这似乎并不比我所做的更好。我只是觉得有一个与我的
函数相当的函数。unlift(x=>Some(super.test(x))
我还没有学会的愚蠢。更新了我的答案以反映你的目标。你看,我知道一定有更简单的方法!真不敢相信我没想到。谢谢