Java Scala偏函数与偏应用函数超详细讲解
偏函数
偏函数(Partial Function),是一个数学概念它不是"函数"的一种, 它跟函数是平行的概念。
Scala中的Partia Function是一个Trait,其的类型为PartialFunction[A,B],其中接收一个类型为A的参数,返回一个类型为B的结果。
例如:
val pf: PartialFunction[Int, String] = {
case 1 => "One"
case 2 => "Two"
case 3 => "Three"
case _ => "Other"
}
println(pf(1)) //One
println(pf(2)) //Two
println(pf(3)) //Three
println(pf(4)) //Other偏函数内部有一些方法,比如isDefinedAt、OrElse、 andThen、applyOrElse等等。
isDefinedAt
isDefinedAt : 这个函数的作用是判断传入来的参数是否在这个偏函数所处理的范围内。
刚才定义的pf来尝试使用isDefinedAt(),只要是数字都是正确的,因为有case _=>"Other"这一句。如果换成其他类型就会报错。
val pf: PartialFunction[Int, String] = {
case 1 => "One"
case 2 => "Two"
case 3 => "Three"
case _ => "Other"
}
println(pf.isDefinedAt(1)) //true
println(pf.isDefinedAt(2)) //true
println(pf.isDefinedAt(3)) //true
println(pf.isDefinedAt(4)) //true
println(pf.isDefinedAt("1"))
/**
* 类型不匹配
* type mismatch;
* found : String("1")
* required: Int
* println(pf.isDefinedAt("1")) */orElse
orElse : 将多个偏函数组合起来使用,效果类似case语句。
val onePF: PartialFunction[Int, String] = {
case 1 => "One"
}
val twoPF: PartialFunction[Int, String] = {
case 2 => "Two"
}
val threePF: PartialFunction[Int, String] = {
case 3 => "Three"
}
val otherPF: PartialFunction[Int, String] = {
case _ => "Other"
}
val newPF = onePF orElse twoPF orElse threePF orElse otherPF
println(newPF(1)) //One
println(newPF(2)) //Two
println(newPF(3)) //Three
println(newPF(4)) //Other这样,newPF跟原先的pf效果是一样的。
andThen
andThen: 相当于方法的连续调用,比如g(f(x))。
pf1的结果返回类型必须和pf2的参数传入类型必须一致,否则会报错。
val pf1: PartialFunction[Int, String] = {
case i if i == 1 => "One"
}
val pf2: PartialFunction[String, String] = {
case str if str eq "One" => "The num is 1"
}
val num = pf1 andThen pf2
println(num(1)) //The num is 1applyOrElse
applyOrElse:它接收2个参数,第一个是调用的参数,第二个是个回调函数。如果第一个调用的参数匹配,返回匹配的值,否则调用回调函数。
val pf: PartialFunction[Int, String] = {
case 1 => "One"
}
println(pf.applyOrElse(1, { num: Int => "two" })) //One
println(pf.applyOrElse(2, { num: Int => "two" })) //two偏应用函数
偏应用函数(Partial Applied Function)也叫部分应用函数,跟偏函数(Partial Function)从英文名来看只有一字之差,但他们二者之间却有天壤之别。
部分应用函数, 是指一个函数有n个参数, 而我们为其提供少于n个参数, 那就得到了一个部分应用函数。
举个例子,定义好一个函数有3个参数,再提供几个有1-2个已知参数的偏应用函数
def add(x: Int, y: Int, z: Int) = x + y + z
// x 已知
def addX = add(1, _: Int, _: Int)
println(addX(2, 3)) //6
println(addX(3, 4)) //8
// x 和 y 已知
def addXAndY = add(10, 100, _: Int)
println(addXAndY(1)) //111
// z 已知
def addZ = add(_: Int, _: Int, 10)
println(addZ(1, 2)) //13到此这篇关于Java Scala偏函数与偏应用函数超详细讲解的文章就介绍到这了,更多相关Java Scala偏函数与偏应用函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
spring中使用@Autowired注解无法注入的情况及解决
这篇文章主要介绍了spring中使用@Autowired注解无法注入的情况及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-09-09
Java实现读取项目中文件(.json或.properties)的方法详解
这篇文章主要为大家详细介绍了Java实现读取项目中文件的方法,例如.json或.properties,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下2023-04-04
Java项目Guava包 HashMultimap使用及注意事项
guava基本上可以说是java开发项目中,大概率会引入的包,今天介绍的主角是一个特殊的容器HashMultmap,可以简单的将它的数据结构理解为Map<K, Set<V>>,今天主要介绍下基础的知识点 HashMultmap级使用,感兴趣的朋友一起看看吧2022-05-05
java 出现问题javax.servlet.http.HttpServlet was not found解决方法
这篇文章主要介绍了java 出现问题javax.servlet.http.HttpServlet was not found解决方法的相关资料,需要的朋友可以参考下2016-11-11


最新评论