scala-之函数curry柯里化

scala-之函数curry柯里化

函数柯里化就是为了证明所有接收多个参数的函数都能转化成 多个接收1个参数的函数,所有的函数都只需要一个参数
【scala-之函数curry柯里化】柯里化的初衷是将步骤进行分解,我们平常用的foreach(pringln(_))就是使用的柯里化函数的方式
package com.shufang.scala01/** * 测试柯里化 * * 编写一个函数,接收两个整数,可以返回两个数的乘积,要求: * 使用常规的方式完成 * 使用闭包的方式完成 * 使用函数柯里化完成 */ object CurryFuncDemo { def main(args: Array[String]): Unit = { //1 使用普通方式 def normal(a: Int, b: Int): Int = { a * b }println(normal(10, 5))//2 使用闭包 def clousure(a: Int): Int => Int = { b: Int => a * b }println(clousure(10)(5))//3 使用柯里化函数 def curry(a: Int)(b: Int): Int = { a * b }println(curry(10)(5))/** 柯里化实践 * 比较两个字符串在忽略大小写的情况下是否相等,注意,这里是两个任务: * 1)全部转大写(或小写) * 2)比较是否相等 * 针对这两个操作,我们用一个函数去处理的思想,其实也变成了两个函数处理的思想(柯里化) * 使用函数柯里化的思想来任务 */def isEquals(s1: String)(s2: String): Boolean = { val str: String = s1.toUpperCase() val str1: String = s2.toUpperCase() if (str.equals(str1)) true else false }println(isEquals("AAAAb")("aaaaB")) //true// 声明一个String类型的对象,就可以扩展功能,调用isEquals方法 implicit class TestEquals(s:String){def isEquals2(ss:String)(func:(String,String) => Boolean): Boolean ={ val bool: Boolean = func(s.toLowerCase, ss.toLowerCase()) bool }} val s = "StRInG" val bool: Boolean = s.isEquals2("String")((s1: String, s2: String) => s1.equals(s2)) println(bool)//柯里化的简写,平常我们使用foreach(print(_))的时候也就是使用柯里化函数,柯里化函数需要将逻辑分为2步 println(s.isEquals2("String")(_.equals(_))) } }

    推荐阅读