Scala 定义一个扩展PartialFunction的对象,直接用cases实现

Scala 定义一个扩展PartialFunction的对象,直接用cases实现,scala,partialfunction,Scala,Partialfunction,我对Scala很陌生,但我已经很喜欢它了。我读过关于部分函数的教程和文章。我想要实现的是有一个扩展PartialFunction[…,…]的对象,并直接用案例定义它,而不需要定义isDefinedAt和应用方法 比如说 val partialfuncval : PartialFunction[Int,Boolean] = { case 1 => false } 是分部函数的有效定义。但是为什么我不能写呢 object PartialFunctionClass extends Pa

我对Scala很陌生,但我已经很喜欢它了。我读过关于部分函数的教程和文章。我想要实现的是有一个扩展PartialFunction[…,…]的对象,并直接用案例定义它,而不需要定义isDefinedAt和应用方法

比如说

val partialfuncval : PartialFunction[Int,Boolean] = {
    case 1 => false
}
是分部函数的有效定义。但是为什么我不能写呢

object PartialFunctionClass extends PartialFunction[Int,Boolean] {
    case 1 => false
}

??这将取消定义isDefinedAt和apply的需要,并使编写某些类型的类(由我正在使用的库预定义)变得更容易。

这些选项之一是否足够

选项1

abstract class DelegatingPartialFunction[-T,+R](underlying: PartialFunction[T,R]) extends PartialFunction[T,R] {
  def apply(t: T) = underlying.apply(t)
  def isDefinedAt(t: T) = underlying.isDefinedAt(t)
}
然后:

选项2

trait DelegatingPartialFunction[-T,+R] extends PartialFunction[T,R] {
  val underlying: PartialFunction[T,R]
  def apply(t: T) = underlying.apply(t)
  def isDefinedAt(t: T) = underlying.isDefinedAt(t)
}
然后:


我知道,这将不允许定义这个类的其他成员,但在这个特殊情况下,它实际上会使事情变得更容易。我应该申请这个功能吗?或者这在某种程度上是可以实现的,我不知道?
trait DelegatingPartialFunction[-T,+R] extends PartialFunction[T,R] {
  val underlying: PartialFunction[T,R]
  def apply(t: T) = underlying.apply(t)
  def isDefinedAt(t: T) = underlying.isDefinedAt(t)
}
object PartialFunctionClass extends DelegatingPartialFunction[Int,Boolean] {
  val underlying = {
    case 1 => true
  }
}