5

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

例如

val partialfuncval : PartialFunction[Int,Boolean] = {
    case 1 => false
}

是偏函数的有效定义。但是为什么我不能写

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

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

4

1 回答 1

6

这些选项之一就足够了吗?

选项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)
}

然后:

object PartialFunctionClass extends DelegatingPartialFunction[Int,Boolean]({
  case 1 => false
})

选项 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)
}

然后:

object PartialFunctionClass extends DelegatingPartialFunction[Int,Boolean] {
  val underlying = {
    case 1 => true
  }
}
于 2014-02-21T20:03:32.777 回答