object Functions {
def main(args: Array[String]) {
// 本地函数
def localFun(msg: String) = println(msg)
localFun("Hi") // 函数对象
var list = List(1, 2, 3)
list.foreach((x: Int) => println(x))
list.foreach(x => println(x))
list.foreach(println(_))
list.foreach(println _)
list.foreach(println)
list.foreach(localFun) // 部分应用函数,将函数转换为函数对象
var addXY5 = add(_: Int, _: Int, 5)
println(addXY5(3, 4))
var addFunObj = add _
println(addFunObj(3, 4, 5))
} def add(x: Int, y: Int, z: Int): Int = {
x + y + z
}
}

嵌套方法、本地方法、字面量,不过是编译器动态帮忙生成了一些匿名类,闭包中捕获的变量也是将其变为这些匿名类型的成员。重点说一下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。

Scala:Functions and Closures的更多相关文章

  1. 学习Scala: 初学者应该了解的知识

    Scala开发参照清单 这里列出在开发一个Scala工程中需要参照的资料. 官网网站 http://www.scala-lang.org/ 文档网站 http://docs.scala-lang.or ...

  2. A Swift Tour(3) - Functions and Closures

    Functions and Closures 使用func来声明函数,通过括号参数列表的方式来调用函数,用 --> 来分割函数的返回类型,参数名和类型,例如: func greet(name: ...

  3. Scala:使用Sublime开发Scala

    Scala:使用Sublime开发Scala 第一步:[Tools][Build System][New Build System] 第二步:在打开的新文件中输入: { //"cmd&quo ...

  4. JavaScript:Functions

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

  5. functions and closures are reference types-函数和闭包是引用类型

    Closures Are Reference Types In the example above, incrementBySeven and incrementByTen are constants ...

  6. Java,Scala:JDBCUtil,MySqlUtil,PhoenixJDBC

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

  7. 客户端,Scala:Spark查询Phoenix

    客户端,Scala:Spark查询Phoenix 1.pom.xml 2.配置文件 2.1config.properties 2.2MyConfig 3.entity实体(与phoenix中的tabl ...

  8. Scala:case class

    Scala:case class 1.Scala中class.object.case class.case object区别 1.1 class 和 object 关系 1.2 case class ...

  9. Scala:函数式编程之下划线underscore

    http://blog.csdn.net/pipisorry/article/details/52913548 python参考[python函数式编程:apply, map, lambda和偏函数] ...

随机推荐

  1. cf797c 栈,字符串

    还以为能用单调栈做出来,,想了老半天,最后发现模拟一下很好做的 按顺序把字符压栈即可 #include<bits/stdc++.h> using namespace std; #defin ...

  2. Fiddler抓包5-接口测试(Composer)

    前言 Fiddler最大的优势在于抓包,我们大部分使用的功能也在抓包的功能上,fiddler做接口测试也是非常方便的. 对应没有接口测试文档的时候,可以直接抓完包后,copy请求参数,修改下就可以了. ...

  3. js获取当前有效样式

      js获取有效样式   节点.currentStyle["属性名"]        兼容ie方法(只有ie有效) getcomputedStyle(节点)["属性名&q ...

  4. 对象本田CRV

    <script> window.onload = function (ev) { var vcar = new Car("本田", "CRV", 4 ...

  5. Hibernate之集合映射的使用(Set集合映射,list集合映射,Map集合映射)

    a:数据库的相关知识: (1):一个表能否有多个主键:不能: (2):为什么要设置主键:数据库存储的数据都是有效的,必须保持唯一性: (3)为什么id作为主键:因为表中通常找不到合适的列作为唯一列,即 ...

  6. python常用内建模块--datetime

    datetime模块中的datetime类: 获取当前时间:datetime.now() 当前操作系统时区时间,date.utctime(UTC时间) 转换成时间戳:timestamp() 和具体时区 ...

  7. Codeforces 891C Envy

    Envy 感觉这种最小生成树上的啥题都差不多的解法.. #include<bits/stdc++.h> #define LL long long #define fi first #def ...

  8. Codeforces 605C Freelancer's Dreams 凸包 (看题解)

    Freelancer's Dreams 我们把每个二元组看成是平面上的一个点, 那么两个点的线性组合是两点之间的连线, 即x * (a1, b1) + y * (a1, b1) && ...

  9. 开发一个支持多用户同时在线的FTP程序

    FTP 要求: .用户加密认证 .允许同时多用户登录 .每个用户有自己的家目录,且只能访问自己的家目录 .对用户进行磁盘配额,每个用户的可用空间不同 .允许用户在ftp server上随意切换目录 . ...

  10. 5.Django|模型层--多表关系

    多表操作 文件为 ---->  orm2 数据库表关系之关联字段与外键约束 一对多Book id title price publish email addr php 人民出版社 北京 pyth ...