函数柯里化(curry)
1) 函数编程中,接受多个参数的函数都可以转化为接受单个参数的函数,这个转化过程就叫柯里 化
2) 柯里化就是证明了函数只需要一个参数而已。其实我们刚才的学习过程中,已经涉及到了柯里 化操作。
3) 不用设立柯里化存在的意义这样的命题。柯里化就是以函数为主体这种思想发展的必然产生的 结果。(即:柯里化是面向函数思想的必然产生结果)
编写一个函数,接收两个整数,可以返回两个数的乘积,要求:
- 使用常规的方式完成
- 使用闭包的方式完成
- 使用函数柯里化完成
def mul(x: Int, y: Int) = x * y
println(mul(10, 10))
def mulCurry(x: Int) = (y: Int) => x * y
println(mulCurry(10)(9))
def mulCurry2(x: Int)(y:Int) = x * y
println(mulCurry2(10)(8))
比较两个字符串在忽略大小写的情况下是否相等,注意,这里是两个任务:
- 全部转大写(或小写)
- 比较是否相等 针对这两个操作,我们用一个函数去处理的思想,其实也变成了两个函数处理的思想(柯里化) 使用函数柯里化的思想来任务
object CurryDemo02 {
def main(args: Array[String]): Unit = {
//这是一个函数,可以接收两个字符串,比较是否相等
def eq(s1: String, s2: String): Boolean = {
s1.equals(s2)
}
//隐式类 (可以参考前面讲解内容)
implicit class TestEq(s: String) {
//体现了将比较字符串的事情,分解成两个任务完成
//1. checkEq 完转换大小写
//2. f 函数完成比较任务
def checkEq(ss: String)(f: (String, String) => Boolean): Boolean = {
f(s.toLowerCase, ss.toLowerCase)
}
}
val str1 = "hello"
println(str1.checkEq("HeLLO")(eq))
//在看一个简写形式
println(str1.checkEq("HeLLO")(_.equals(_)))
}
}
关注公众号 海量干货等你