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. Android设计模式-观察者模式

    原文地址 http://blog.csdn.net/qq_25806863/article/details/69218968 观察者模式是一种使用频率非常高的设计模式,最常用的地方就是订阅-发布系统. ...

  2. 石头剪刀布三局两胜(平局重来break用法)

  3. 在 laravel 的 DB::transaction 中,为外部变量赋值

    例如,我想在 laravel 的事务中,对某个外部变量赋值,然后在后续的逻辑中判断该变量的属性 $user = null; // init DB::transaction(function() use ...

  4. STL整理之map

    转载请注明出处,部分内容引自李煜东<算法竞赛进阶指南> 前置知识:    C++.C语言入门 Map是什么 Map是从键(key)到值(value)的映射,其内部实现是一棵以key为关键码 ...

  5. python 全栈开发,Day45(html介绍和head标签,body标签中相关标签)

    一.html介绍 1.web标准 web准备介绍: w3c:万维网联盟组织,用来制定web标准的机构(组织) web标准:制作网页遵循的规范 web准备规范的分类:结构标准.表现标准.行为标准. 结构 ...

  6. python yield,到这个层次,才能叫深入哈

    http://python.jobbole.com/88677/?utm_source=blog.jobbole.com&utm_medium=relatedPosts ~~~~~~~~~~~ ...

  7. 放弃WebView,使用Crosswalk做富文本编辑器

    版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/4100132.html 为什么放弃WebView Androi ...

  8. 新建asp.net core项目

    开发环境:Windows Server R2 2008 开发工具:Microsoft Visual Studio 2017 新建asp.net core项目 创建web项目时,务必选择“ASP.NET ...

  9. R从3.4升级到3.5

    这里介绍的就是R的一个包:installr. installr {installr} R Documentation Installing software from R Description Gi ...

  10. NumPy学习(索引和切片,合并,分割,copy与deep copy)

    NumPy学习(索引和切片,合并,分割,copy与deep copy) 目录 索引和切片 合并 分割 copy与deep copy 索引和切片 通过索引和切片可以访问以及修改数组元素的值 一维数组 程 ...