scala偏函数

1,877次阅读
没有评论

所谓偏函数(也叫部分函数)与完全函数对应,普通的方法都是完全函数,即 f(i:Int) = xxx 是将所有Int类型作为参数的,是对整个Int集的映射;而偏函数则是对部分数据的映射,比如上面{case 2=> “OK” }就仅仅只对2做了映射。偏函数的实现都是通过模式匹配来表达的。 构建一个偏函数p,并map到它:

scala>  val p:PartialFunction[Int,String] = { case 2 => "OK" }
p: PartialFunction[Int,String] = <function1>
scala> List(2) map p
res21: List[String] = List(OK)

因为偏函数是通过 { case x => y } 这种特殊的方式来描述的,上面的{case 2=>”OK”}就被当作了一段偏函数字面量,而偏函数背后的类型PartialFunction[A,B]是继承自Function1[A,B]的,所以将这段匿名的偏函数传给map方法是ok的。

偏函数到底是什么 偏函数是只对函数定义域的一个子集进行定义的函数,定义域X中可能存在某些值在值域Y中没有对应的值。scala中用scala.PartialFunction[-T, +S]类来表示。比如前文中这个例子就是定义了一个偏函数:

scala>  val p:PartialFunction[Int,String] = { case 2 => "OK" }
p: PartialFunction[Int,String] = <function1>

当你在代码中需要多次调用一个函数, 而其中的某个参数又总是一样的时候, 使用这个可以使你少敲一些代码。

所以回头看,如果想搞懂偏函数,必须先搞懂scala中的模式匹配,因为scala可以通过模式匹配来定义偏函数,多半也是用在模式匹配里了。

admin
版权声明:本站原创文章,由admin2018-01-04发表,共计723字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)