scala的加里化(currying)纠结了很久。通过Scala Worksheet 可以打印很多调试信息,所以用它写了一些测试代码,帮助自己理解。

object test {
//一个参数列表,3个参数
def sum(a: Int, b: Int, c: Int) = a + b + c //> sum: (a: Int, b: Int, c: Int)Int //将一个参数列表,拆分成三个参数列表
def sum4(a: Int)(b: Int)(c: Int) = a + b + c //> sum4: (a: Int)(b: Int)(c: Int)Int //sum4的偏应用函数
val fn4 = sum4 _ //> fn4 : Int => (Int => (Int => Int)) = <function1> //根据偏应用函数,便可定义出如下函数:
def sum44(a: Int) = {
(b: Int) =>
{
(c: Int) =>
{
a + b + c
}
}
} //> sum44: (a: Int)Int => (Int => Int) //自定义函数的偏应用函数
val fn44 = sum44 _ //> fn44 : Int => (Int => (Int => Int)) = <function1> sum(1, 2, 3) //> res0: Int = 6
sum4(1)(2)(3) //> res1: Int = 6
sum44(1)(2)(3) //> res2: Int = 6 //将2,3分别偏应用到第一个,第二个参数上
val fn44_2 = sum44(2)(3)(_:Int) //> fn44_2 : Int => Int = <function1>
fn44_2(4) //> res3: Int = 9
fn44_2.apply(4) //> res4: Int = 9 }
  • 偏函数应用是找一个函数,固定其中的几个参数值,从而得到一个新的函数。
  • 函数加里化是一种使用匿名单参数函数来实现多参数函数的方法。
  • 函数加里化能够让你轻松的实现某些偏函数应用。

参考:

闭包的定义    https://en.wikipedia.org/wiki/Closure_(computer_programming)

加里化的定义 https://en.wikipedia.org/wiki/Currying

最新文章

  1. 在SqlServer中使用Try Catch(转)
  2. 关于typedef的用法总结(转)
  3. 忘记导入struts2-xxx-plugin-x.x.x.jar导致服务器启动报Unable to load configuration.Caused by: Parent package is not defined: xxx-default
  4. Android apk程序调用其它的APK程序
  5. C语言小结之链表
  6. PHP获取文件行数
  7. poj 2376 Cleaning Shifts(贪心)
  8. 在Windows上安装FFmpeg程序的方法(you-get下载视频必备程序)
  9. 洛谷P4769 冒泡排序
  10. JDBC的简单笔记
  11. Pycharm调试:进入调用函数后返回
  12. finecms如何调用多个指定栏目的内容
  13. INotifyPropertyChanged接口的实现
  14. Django模型之Meta详解
  15. linux 软件包安装方式选择、安装位置、源码包安装
  16. jpql和sql的区别
  17. 下载外部jar包后,链接源码和javadoc.jar
  18. 31、Flask实战第31天:cms后台修改密码
  19. (转)rvm安装与常用命令
  20. 【爬坑系列】之解读kubernetes的认证原理&amp;实践

热门文章

  1. fastadmin cms使用注意一
  2. Java集合框架——Map接口
  3. java类和对象详解
  4. ffmpeg解码音视频过程(附代码)
  5. Pycharm超级好用的快捷键——效率之王
  6. 【背包问题】PACKING
  7. memcached基本操作指令
  8. # 使用scatter()绘制散点图
  9. 手工实现HttpBasic校验
  10. splice与slice区别