1 object Functions {
 2   def main(args: Array[String]) {
 3     // 本地函数
 4     def localFun(msg: String) = println(msg)
 5     localFun("Hi")
 6
 7     // 函数对象
 8     var list = List(1, 2, 3)
 9     list.foreach((x: Int) => println(x))
10     list.foreach(x => println(x))
11     list.foreach(println(_))
12     list.foreach(println _)
13     list.foreach(println)
14     list.foreach(localFun)
15
16     // 部分应用函数,将函数转换为函数对象
17     var addXY5 = add(_: Int, _: Int, 5)
18     println(addXY5(3, 4))
19     var addFunObj = add _
20     println(addFunObj(3, 4, 5))
21   }
22
23   def add(x: Int, y: Int, z: Int): Int = {
24     x + y + z
25   }
26 }

嵌套方法、本地方法、字面量,不过是编译器动态帮忙生成了一些匿名类,闭包中捕获的变量也是将其变为这些匿名类型的成员。重点说一下function object,类似.Net的Delegate,function object的字面量表示为:(arguments list)=> body,如果参数在方法中只会出现一次,则可以采用“_”语法,即:不用参数列表,_出现的次序依次为对应的参数。

function 如何转换为 function object?这就涉及partial apply function,具体也很简单,对于任意一个函数:func,func _ 代表没有apply任何参数,返回一个和func有同样参数列表的function object,也可以像上例一样只填充部分参数。

如果需要的function object的签名和function的签名一致,则编译器会自动将function部分应用为function object。

转载于:https://www.cnblogs.com/happyframework/p/4216975.html

Scala:Functions and Closures相关推荐

  1. Pragmatic Scala:Create Expressive, Concise, and Scalable Applications (读书笔记)

    Pragmatic Scala:Create Expressive, Concise, and Scalable Applications 目录 1 From Java to Scala 2 Obje ...

  2. Scala:Enumeration

    2019独角兽企业重金招聘Python工程师标准>>> Scala:Enumeration scala的枚举的声明,与Java中声明有很大区别,Scala的枚举值有些特殊,它的关键是 ...

  3. Scala:未受重视却潜力巨大的Android编程语言

    Scala:未受重视却潜力巨大的Android编程语言 2011-08-31 09:03 核子可乐译 51CTO.com 我要评论(0) 字号:T | T 静态类型Java语言以JRuby及Groov ...

  4. JavaScript:Functions

    ylbtech-JavaScript:Functions 1.返回顶部 JavaScript 全局对象 全局属性和函数可用于所有内建的 JavaScript 对象. 顶层函数(全局函数) 函数 描述 ...

  5. Java,Scala:JDBCUtil,MySqlUtil,PhoenixJDBC

    Java,Scala:JDBCUtil,MySqlUtil,PhoenixJDBC pom.xml添加依赖 Java:方式一(亲测实用) 方式二:Scala 方式三:Java PhoenixJDBCU ...

  6. Scala:函数与匿名函数

    Scala:函数与匿名函数 函数是第一等公民 函数类型 高阶函数 匿名函数 函数是第一等公民 在scala中,函数是第一等公民 Scala中,函数和变量有同等的位置,或者说函数也是一种变量. Scal ...

  7. Scala:try match

    Scala:try & match try表达式 match 表达式 try表达式 try表达式的语意与java中try-catch-finally是一样的. 但是try在scala中不是一个 ...

  8. 学习Scala:伴生对象的实现原理

    在上一篇关于Scala的文章 学习Scala:孤立对象的实现原理 中, 主要分析了孤立对象是如何实现的. 首先回顾一下. 孤立对象是只有一个object关键字修饰的对象. 该对象会编译成两个class ...

  9. 深入理解JavaScript系列:闭包(Closures)

    介绍 本章我们将介绍在JavaScript里大家经常来讨论的话题 -- 闭包(closure).闭包其实大家都已经谈烂了.尽管如此,这里还是要试着从理论角度来讨论下闭包,看看ECMAScript中的闭 ...

最新文章

  1. spark sql中的窗口函数
  2. 用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题
  3. inur new.php id,Cmsez(随易)全站系统 0day
  4. ZooKeeper(一)linux上单机与集群的搭建
  5. VS2017 winform 打包(使用 Microsoft Visual Studio 2017 Installer Project)
  6. 用DataFormatString格式化GridView 【转】
  7. 开源项目:浏览器前进后退发现请求了接口,也有数据返回,但是前端并没有渲染数据是什么问题?
  8. Java学习(21-25天, 树与二叉树)
  9. 《Java就业培训教程》_张孝祥_书内源码_04
  10. 简单论坛的搭建(Discuz)、memchche、OpenResty(类nginx)
  11. 学习笔记(1):C#Winform水晶报表实例教程-设计带图片的水晶报表
  12. 各层电子数排布规则_电子数的排布规律是什么?
  13. 弗兰克(最少五个字)
  14. requests的基本使用以及爬虫的基本介绍:QQ机器人制作基础
  15. 命名空间提示“http://schemas.microsoft.com/xaml/behaviors”不存在Interation的解决办法
  16. 2022年3月语音合成(TTS)和语音识别(ASR)论文月报
  17. 抖音:资本、梦想与躁动荷尔蒙裹挟的世界
  18. javase哪部分最难_关于javase的一些个人理解
  19. 判断文件夹是否存在的方法
  20. html上下两个箭头符号怎么打出来,电脑箭头符号怎么打出来(往返箭头符号图案)...

热门文章

  1. 使用myeclipse的第一步
  2. 2022-2028年中国激光玻璃行业市场供需规模及发展趋势研究报告
  3. 2022-2028年中国大理石料行业市场研究及前瞻分析报告
  4. Go 源码里的这些 //go: 指令,go:linkname 你知道吗?
  5. 2022-2028中国曝光机市场现状及未来发展趋势
  6. 2022-2028年中国电梯行业市场调查及前瞻分析报告
  7. 【牛腩新闻发布系统】开始前端03
  8. tensorflow问题
  9. 机器学习PAI产品架构
  10. LED液晶与OLED:电视显示技术比较