带有isDefinedA的ScalaPartialFunction并应用不起作用

我是 Scala 的新手,我正在尝试 PartialFunctions,这是测试功能的正确方法吗,因为一些教程遵循此方法工作,但对我不起作用?

代码:

object MyScalaApp extends App {
def try29{
    val r = new PartialFunction[Int, Int]  
    { 
        def isDefinedAt(q: Int) = q < 0 // Applying isDefinedAt method  
        def apply(q: Int) = 12 * q // Applying apply method 
    }        
    val rr = new PartialFunction[Double, Double]  
    { 
        def isDefinedAt(q: Double) = {q < 0}
        def apply(q: Double) = 12 * q 
    }

    println(r(1))
    println(r(2))        
    println(rr(-1))
    println(rr(-2))
  }
  }
  try29
}

输出:

12
24
-12.0
-24.0

为什么apply在不匹配第一个条件时会被调用?
当我写def isDefinedAt(q: Int) = q != 0它时,它println(r(0))作为输出0

回答

根据ScalaDocs 页面:

在调用isDefinedAt之前调用是调用者的责任apply......

让我们r()isDefinedAt()自动调用的上下文中尝试您的Partial Function 。

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)

似乎按预期工作。


以上是带有isDefinedA的ScalaPartialFunction并应用不起作用的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>