柯里化(Currying)  

  把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

  简单的实现如下:

scala> def add(x:Int, y:Int) = x + y
add: (x: Int, y: Int)Int

  假如我们应用的时候,是这样的:add(1,2)

  柯里化函数

scala> def add(x:Int)(y:Int) = x + y

  Curry化最大的意义在于把多个参数的function等价转化成多个单参数function的级联,这样所有的函数就都统一了,方便做lambda演算。 在scala里,curry化对类型推演也有帮助,scala的类型推演是局部的,在同一个参数列表中后面的参数不能借助前面的参数类型进行推演,curry化以后,放在两个参数列表里,后面一个参数列表里的参数可以借助前面一个参数列表里的参数类型进行推演。这就是为什么 foldLeft这种函数的定义都是curry的形式。

  如下是本人查阅资料所了解到Scala语言柯里化函数的四种写法:

第一种写法:

  不显示声明返回类型,Scala会自动推断出返回类型:

scala> def currying_1(x:Int) = {
| y:String => y * x
| } currying_1: (x: Int)String => String // =>符号意味着返回的是一个函数

  调用方式:

scala> currying_1()("scalA")
res0: String = scalAscalAscalA

第二种写法:

  显式声明返回类型——函数:

scala> def currying_2(x:Int): String => String = {
| y => y * x
| }
currying_2: (x: Int)String => String // =>符号左边的String对应的是y,=>符号右边的String就对应着y * x

  调用方式:

scala> type curry_2() //验证返回类型,确实是个函数
res5: String => String = <function1>

第三种写法:

  不显示声明返回类型,Scala会自动推断出返回类型:

scala> def currying_3(x:Int)(y:String) = {
| y * x
| }
currying_3: (x: Int)(y: String)String

  调用方式:

scala> currying_3()("ScalA")
res1: String = ScalAScalAScalA

第四种写法:

  显式声明返回类型:

scala> def currying_4(x:Int)(y:String): String = {
| y * x
| }
currying_4: (x: Int)(y: String)String

  调用方式:

scala> currying_4()("ScalaA")
res2: String = ScalaAScalaAScalaA

最新文章

  1. openfoam 的安装【转载】
  2. 机器学习&amp;数据挖掘笔记_19(PGM练习三:马尔科夫网络在OCR上的简单应用)
  3. .net中常用的几种页面间传递参数的方法
  4. iOS-项目搭建
  5. Android(java)学习笔记122:TabActivity使用
  6. SAE 上传根目录不存在!请尝试手动创建:./Uploads/Picture/
  7. [Android阅读代码]圆形旋转菜单CircleMenu
  8. DB2数据类型
  9. Pro Git CN Plus
  10. 分割字节流为G,MB,KB的算法
  11. 微信小程序调用高德地图
  12. JDBC学习笔记之JDBC简介
  13. Python爬虫实战四之抓取淘宝MM照片
  14. MySQL数据库select语句的使用方法
  15. 扩展LV手记
  16. popular short sentences
  17. 【BZOJ】【2286】【SDOI2011】消耗战
  18. 我所理解的设计模式(C++实现)——解释器模式(Interpreter Pattern)
  19. D - How Many Tables (并查集)(水题)
  20. 云巴-JavaScript API测试与实例(新)

热门文章

  1. 有价证券secuerity英语
  2. GO执行shell命令
  3. 子网掩码与ip地址的关系
  4. day 04 预科
  5. 小程序的openid和公众号的openid是否一致
  6. X509IncludeOption 枚举
  7. jquery 子元素筛选选择器
  8. python正则表达式练习题
  9. 微信小程序之执行环境
  10. Alpha冲刺(8/10)——2019.5.1