scala中的柯里化
先看看百科当中的关于柯里化的介绍
在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
在直觉上,柯里化声称“如果你固定某些参数,你将得到接受余下参数的一个函数”。所以对于有两个变量的函数 y x {\displaystyle y^{x}} y^{x},如果固定了 y = 2 {\displaystyle y=2} y=2,则得到有一个变量的函数 2 x {\displaystyle 2^{x}} 2^{x}。
接着看看scala当中的柯里化
看如下代码:
需求:实现两个参数相加
//普通方法1 参数为两个的方法
def method1(x:Int,y:Int):Int={
x+y
}
//调用
val i1: Int = method1(1,2)
println(i1)
//普通方法2 参数为一个的方法
def method2(x:Int):Int=>Int={
(y:Int)=>{x+y} //返回一个Int=>Int类型函数
}
val intToInt2: Int => Int = method2(1)
val i2: Int = intToInt2(2) //调用返回的函数
println(i2)
//柯里化的方法
def method(x:Int)(y:Int):Int={
x+y
}
//调用方式一
val i4: Int = method(1)(2)
println(i4)
//调用方式二
val intToInt: Int => Int = method(1) //返回一个
val i3: Int = intToInt(2)
println(i3)
普通方法一 必须输入两个参数才能得到结果
普通方法二可以实现百科中柯里化的效果 但是只能依次调用获取函数输出结果
柯里化方法可以两个参数一起传递得到结果 也可以传一个参数得函数
实际上就是方法二的一个简化,使得函数调用更加灵活。