美文网首页
Scala中的柯里化

Scala中的柯里化

作者: 执虚如盈_8d4f | 来源:发表于2020-12-14 21:43 被阅读0次

一:什么是柯里化

柯里化技术以逻辑学家Haskell Curry命名的(尽管它是Moses Schnfinkel 和 Gottlob Frege发明的)。它是把接受多个参数的函数变换成接受一个单一参数的函数,并且返回接受余下参数的新函数的技术。

简单理解就是改变函数的表达形式但其功能特性不变,这对于第一次接触柯里化的人来讲,这样的技术貌似有点鸡肋,但如果你有丰富的JS编程经验的话,相信就一定会感受到柯里化其实具有很高的实用性。无论是在提高适用性还是延迟执行或是固定易变因素等方面,柯里化技术都发挥着重要的作用

二:从案例角度学习Scala柯里化

从两个整数相乘运算的函数来揭开柯里化的神秘面纱

在Scala中定义两个整数相乘运算的函数式非常简单的,具体如下:

def mul1(x:Int, y:Int) = x * y

使用柯里化技术可以将上述两个整数的乘法函数修改为接受一个参数的函数,只是该函数返回的是一个以原有第二个参数为参数的函数

def mul2(x:Int) = (y:Int) =>x*y

mul2为接收一个参数的新等价函数,(y:Int)=> x*y 则是新等价函数的返回体,它本身就是一个函数(严格来说应该是一个匿名函数),参数为除等新函数参数外原有函数剩余参数

在Scala中可以进一步简化为def mul2(x:Int)(y:Int) = x*y

三:总结柯里化的作用

柯里化技术在提高适用性还是在延迟执行或固定易变等因素方面有着重要的作用,加上Scala语言本身就是推崇简洁编码,使得同样功能的函数定义与转换的时候会更灵活多样。另外在Spark的源码中有大量运用Scala柯里化技术的情况,需要掌握好该技术才能看得懂相关的源码

相关文章

网友评论

      本文标题:Scala中的柯里化

      本文链接:https://www.haomeiwen.com/subject/nevbgktx.html