zoukankan      html  css  js  c++  java
  • 函数柯里化(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(_)))
      }
    
    }
    关注公众号 海量干货等你
  • 相关阅读:
    Talk the Talk
    2.1 使用eclipse4.4 搭建 maven简单结构项目。
    [LeetCode] Best Time to Buy and Sell Stock
    hdu4605Magic Ball Game 树状数组
    phoenixframe自己主动化平台在Linux环境下运行用例的说明
    数据存储值归档Archive
    BZOJ 1040 ZJOI2008 骑士 树形DP
    HDOJ 5357 Easy Sequence DP
    Autodesk 招聘Revit二次开发咨询顾问,与Autodesk全球团队紧密合作,提高职业生涯的好机会
    Codeforces Round #263 (Div. 1) A B C
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734158.html
Copyright © 2011-2022 走看看