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(_)))
}
}
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- 太平之莲
- 闲杂“细雨”
- 七年之痒之后
- 深入理解Go之generate
- 由浅入深理解AOP
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 生活随笔|好天气下的意外之喜
- 感恩之旅第75天
- python学习之|python学习之 实现QQ自动发送消息