函数柯里化(curry)

1) 函数编程中,接受多个参数的函数都可以转化为接受单个参数的函数,这个转化过程就叫柯里 化
2) 柯里化就是证明了函数只需要一个参数而已。其实我们刚才的学习过程中,已经涉及到了柯里 化操作。
3) 不用设立柯里化存在的意义这样的命题。柯里化就是以函数为主体这种思想发展的必然产生的 结果。(即:柯里化是面向函数思想的必然产生结果)

编写一个函数,接收两个整数,可以返回两个数的乘积,要求:

  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))

比较两个字符串在忽略大小写的情况下是否相等,注意,这里是两个任务:

  1.  全部转大写(或小写)
  2. 比较是否相等 针对这两个操作,我们用一个函数去处理的思想,其实也变成了两个函数处理的思想(柯里化) 使用函数柯里化的思想来任务
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(_)))
  }

}
关注公众号 海量干货等你
原文地址:https://www.cnblogs.com/sowhat1412/p/12734158.html