() => Unit ---> 是一个函数;
=> Unit --> 是一个执行结果为Unit的表达式

code: => Unitby name 传递参数。参数是一个返回值为Unit的代码块。在传递的时候,参数没有被调用。比如:

def test(code : => Unit){
println("start")
code // 这行才会调用传入的代码块,写成code()亦可
println("end")
}
test{// 此处的代码块不会马上被调用
println("when evaluated")
println("bb")
}

结果

start
when evaluated
bb
end

注意:when evaluated被打印在了startend中间。

code: ()=>Unit参数的类型,是一个没有参数而且返回值为Unit的函数类型。

def test1(code: ()=>Unit){
println("start")
code() // 要想调用传入的代码块,必须写成code(),否则不会调用。
println("end")
}
test1 {//此代码块,传入后立即执行。
println("when evaluated")
()=>{println("bb")}
}

结果:

when evaluated
start
bb
end

注意:when evaluated被打印在了start之前。

实际上,在第二例当中,test1的参数是一个表达式。在Scala中,如果将要传入的参数正好是一个,则可以用花括号。这时候test1的参数列表是一个表达式,而这个表达式的结果是最后一行的返回,也就是一个函数() => { println("bb") },它被传给了test1的唯一参数。然后test1方法体执行。至于为什么when evaluated在另外三行之前,是因为它是在传参的时候,求表达式值的副产物。

其实code :=> Unit就是code : () => Unit,只是第一种是按传参,用花括号可以把花括号内的所有东西作为一个函数传给code;第二种就是普通传参,但是它刚好只有一个参数。这时候用了花括号,就是花括号内表达式的值传进去了。

最后,提供对等用例

object FunctionTest2 {
def main(args: Array[String]) {
def test(code: => Unit) {
println("start")
code
println("end")
}
test {
println("when evaluated")
println("bb")
} def test1(code: () => Unit) {
println("start")
code()
println("end")
}
test1 {
() =>
println("when evaluated")
println("bb")
}
}
}

最新文章

  1. Ecshop 后台增加一个左侧列表菜单menu菜单的方法
  2. 9.10---堆箱子问题(CC150)
  3. 看好你的门-客户端传数据-用java修改referer
  4. time_wait 过多 造成网络慢 实战
  5. Float Equal Problem
  6. 【翻译】Kinect v2程序设计(C++) BodyIndex篇
  7. 【11】在operator=中处理“自我赋值”
  8. linux OpenOffice
  9. js打开新的链接下载文件
  10. 【Samza系列】实时计算Samza中文教程(二)——概念
  11. centos7配置开启无线网卡,重启防火墙
  12. IOS的自定义控件
  13. Error:Error #2174
  14. 北京工业大学耿丹学院2016下C作业学习总结
  15. testng中使用reportng报告
  16. javac编译原理
  17. Confluence 6 升级自定义的站点和空间关闭缓存
  18. spring cloud服务提供与调用示例
  19. Could not load conf for core new_core 解決方法
  20. Android Dragger2快速入门浅析

热门文章

  1. linux命令学习(4):cd命令
  2. customer.java
  3. HashSet TreeSet
  4. textarea 标签 属性
  5. 常用Common集合
  6. 英语专业出身也要走向python
  7. Luogu 3369 / BZOJ 3224 - 普通平衡树 - [无旋Treap]
  8. Django:管理站点
  9. opencv模板匹配有趣的链接
  10. [DPI][TCP] linux API的接口如何控制urgent包的收发