简单的Scalawww.zhihu.com/column/c_1702610730803744768 定义 PartialFunction用在模式匹配中,只有在其定义的输入范围内才会返回结果。如果输入值不在函数的定义范围内,部分函数会抛出异常。 举例 普通匹配函数 可以匹配到1,2,3, 但是4的话就会抛出异常 object PartialFunctions extends App { val matchNumber = ...
* PartialFunction 和 [[scala.Function1]] 的主要区别在于偏函数的使用者可以选择对其定义域之外的输入执行其他操作。例如: * * {{{ * val sample = 1 to 10 * val isEven: PartialFunction[Int, String] = { * case x if x % 2 == 0 => x+" 是偶数" * } ...
val toLower: PartialFunction[String, String] = { case str if str.nonEmpty => str.toLowerCase } val combinedFunction = toUpper.orElse(toLower) val result2 = combinedFunction.applyOrElse("WORLD", (_: String) => "N/A") println(result2) // 输出 "world" 通过以上步骤,可以在Scala中...
Scala是一种多范式编程语言,它结合了面向对象编程和函数式编程的特性。在Scala中,PartialFunction是一种特殊的函数,它只对输入的某些值进行定义,而对其他值则没有定义。 PartialFunction的结果可以通过调用apply方法来获取。如果输入的值在PartialFunction的定义范围内,apply方法将返回对应的结果。如果输入的值不在定义范围...
就像你注意到的那样,你可以使用内联的形式定义一个偏函数(就像上面的case),编译器知道那是一个偏函数,所以,尽量避免显式调用PartialFunction特质。 偏函数也会说谎: scala> def liar: PartialFunction[Any, Int] = { case i: Int ⇒ i; case s: String ⇒ s.toInt } ...
首先定义一个type CheckNum=PartialFunction[Int,(Int)=>Int]类型,这里的第一个Int对应的是NamedPF[A,B]的A类型,(Int)=>Int对应的是B类型,它是一个参数为Int,返回Int类型的匿名函数, 然后我们定义了一个不可变变量check,类型就是CheckNum, 他的具体实现是 ...
我们可以看到PartialFunction是一个trait,它继承自函数 (A => B), 这个函数有一个参数和一个返回值,在Scala中,该函数会被自动解析为Function1。 Function1的定义: trait Function1[@specialized(scala.Int, scala.Long, scala.Float, scala.Double) -T1, @specialized(scala.Unit, scala.Boolean, scala.Int, ...
我们可以看到PartialFunction是一个trait,它继承自函数 (A => B), 这个函数有一个参数和一个返回值,在Scala中,该函数会被自动解析为Function1。 我们看下Function1的定义: trait Function1[@specialized(, scala.Long, scala.Float, scala.Double) -T1, @specialized(scala.Unit, scala.Boolean, , scala.Float...
scala> List(1, 3, 5, "seven") collect inc res5: List[Int] = List(2, 4, 6) 1. 2. 3. 4. 5. 6. 当然,假设偏函数的逻辑很复杂,可能通过定义一个专门的类并继承PartialFunction是更好选择。 Case语句是怎样被编译成偏函数的 关于这个问题在《Programming In Scala》中有较为具体的解释。对于这...
Scala的Partial Function和Curry 说白了,就是不需要全部参数的函数,通常用来做变量或者别的函数的参数使用,比如: def concatUpper(s1: String, s2: String): String = (s1 + " " + s2).toUpperCase val c = concatUpper _ println(c("short", "pants"))...