Scala:Functions and Closures
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相关推荐
- Pragmatic Scala:Create Expressive, Concise, and Scalable Applications (读书笔记)
Pragmatic Scala:Create Expressive, Concise, and Scalable Applications 目录 1 From Java to Scala 2 Obje ...
- Scala:Enumeration
2019独角兽企业重金招聘Python工程师标准>>> Scala:Enumeration scala的枚举的声明,与Java中声明有很大区别,Scala的枚举值有些特殊,它的关键是 ...
- Scala:未受重视却潜力巨大的Android编程语言
Scala:未受重视却潜力巨大的Android编程语言 2011-08-31 09:03 核子可乐译 51CTO.com 我要评论(0) 字号:T | T 静态类型Java语言以JRuby及Groov ...
- JavaScript:Functions
ylbtech-JavaScript:Functions 1.返回顶部 JavaScript 全局对象 全局属性和函数可用于所有内建的 JavaScript 对象. 顶层函数(全局函数) 函数 描述 ...
- Java,Scala:JDBCUtil,MySqlUtil,PhoenixJDBC
Java,Scala:JDBCUtil,MySqlUtil,PhoenixJDBC pom.xml添加依赖 Java:方式一(亲测实用) 方式二:Scala 方式三:Java PhoenixJDBCU ...
- Scala:函数与匿名函数
Scala:函数与匿名函数 函数是第一等公民 函数类型 高阶函数 匿名函数 函数是第一等公民 在scala中,函数是第一等公民 Scala中,函数和变量有同等的位置,或者说函数也是一种变量. Scal ...
- Scala:try match
Scala:try & match try表达式 match 表达式 try表达式 try表达式的语意与java中try-catch-finally是一样的. 但是try在scala中不是一个 ...
- 学习Scala:伴生对象的实现原理
在上一篇关于Scala的文章 学习Scala:孤立对象的实现原理 中, 主要分析了孤立对象是如何实现的. 首先回顾一下. 孤立对象是只有一个object关键字修饰的对象. 该对象会编译成两个class ...
- 深入理解JavaScript系列:闭包(Closures)
介绍 本章我们将介绍在JavaScript里大家经常来讨论的话题 -- 闭包(closure).闭包其实大家都已经谈烂了.尽管如此,这里还是要试着从理论角度来讨论下闭包,看看ECMAScript中的闭 ...
最新文章
- spark sql中的窗口函数
- 用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题
- inur new.php id,Cmsez(随易)全站系统 0day
- ZooKeeper(一)linux上单机与集群的搭建
- VS2017 winform 打包(使用 Microsoft Visual Studio 2017 Installer Project)
- 用DataFormatString格式化GridView 【转】
- 开源项目:浏览器前进后退发现请求了接口,也有数据返回,但是前端并没有渲染数据是什么问题?
- Java学习(21-25天, 树与二叉树)
- 《Java就业培训教程》_张孝祥_书内源码_04
- 简单论坛的搭建(Discuz)、memchche、OpenResty(类nginx)
- 学习笔记(1):C#Winform水晶报表实例教程-设计带图片的水晶报表
- 各层电子数排布规则_电子数的排布规律是什么?
- 弗兰克(最少五个字)
- requests的基本使用以及爬虫的基本介绍:QQ机器人制作基础
- 命名空间提示“http://schemas.microsoft.com/xaml/behaviors”不存在Interation的解决办法
- 2022年3月语音合成(TTS)和语音识别(ASR)论文月报
- 抖音:资本、梦想与躁动荷尔蒙裹挟的世界
- javase哪部分最难_关于javase的一些个人理解
- 判断文件夹是否存在的方法
- html上下两个箭头符号怎么打出来,电脑箭头符号怎么打出来(往返箭头符号图案)...