gpt4 book ai didi

scala - 定义一个扩展 PartialFunction 的对象,直接用 case 实现

转载 作者:行者123 更新时间:2023-12-04 18:42:42 24 4
gpt4 key购买 nike

我对 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)
}

然后:
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
}
}

关于scala - 定义一个扩展 PartialFunction 的对象,直接用 case 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21943860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com