函数柯里化(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(_)))
  }
}
    关注公众号 海量干货等你
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号