带有isDefinedA和apply的Scala PartialFunction不工作
我是Scala新手,我在尝试部分功能,这是测试功能的正确方法吗,因为一些教程遵循这一点工作,但不适合我 代码: 为什么带有isDefinedA和apply的Scala PartialFunction不工作,scala,partialfunction,Scala,Partialfunction,我是Scala新手,我在尝试部分功能,这是测试功能的正确方法吗,因为一些教程遵循这一点工作,但不适合我 代码: 为什么applyget call与第一个条件不匹配? 当我写入def isDefinedAt(q:Int)=q!=0它根据以下公式给出println(r(0))作为输出0: 在调用apply之前,调用方有责任调用isDefinedAt 让我们在自动调用isDefinedAt()的上下文中尝试您的r()分部函数 val r = new PartialFunction[Int, Int]
apply
get call与第一个条件不匹配?当我写入
def isDefinedAt(q:Int)=q!=0
它根据以下公式给出println(r(0))
作为输出0
:
在调用apply
之前,调用方有责任调用isDefinedAt
让我们在自动调用isDefinedAt()
的上下文中尝试您的r()
分部函数
val r = new PartialFunction[Int, Int] {
def isDefinedAt(q: Int) = q < 0
def apply(q: Int) = 12 * q
}
List(4,-3,22,-9,0).collect(r)
//res0: List[Int] = List(-36, -108)
val r=新的部分函数[Int,Int]{
def isDefinedAt(q:Int)=q<0
def应用(q:Int)=12*q
}
列表(4,-3,22,-9,0)。收集(r)
//res0:List[Int]=List(-36,-108)
似乎像预期的那样起作用。这不完全是你所要求的,但我认为值得一提的是它的存在。如果以后您计划编写以下代码:
if(r.isDefinedAt(1)) r(1) else 10
最好使用applyOrElse
,如文档中所述:
请注意,表达式pf.applyOrElse(x,默认值)
等效于
if(pf isDefinedAt x) pf(x) else default(x)
除了applyOrElse
方法可以更有效地实现之外。对于所有的部分函数文本,编译器生成一个applyOrElse实现,以避免对模式匹配器和保护进行双重计算。这使得applyOrElse成为许多操作和场景高效实现的基础
是的,我接受了答案,谢谢
if(r.isDefinedAt(1)) r(1) else 10
if(pf isDefinedAt x) pf(x) else default(x)