博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala学习笔记(9)-函数和闭包
阅读量:6619 次
发布时间:2019-06-25

本文共 777 字,大约阅读时间需要 2 分钟。

  hot3.png

函数这块有很多简洁的用法,简洁的同时也带来了代码易阅读的问题,所以个人不特别建议大量使用,用兴趣的可以自己去搜搜看。

闭包:closure

函数文本在运行时创建的函数值(对象)被称为闭包:closure。名称源自于通过“捕获”自由变量的绑定对函数文本执行的“关闭”行动。不带自由变量的函数文本,如(x: Int) => x + 1,被称为封闭术语:closed term 。这个函数文本在运行时创建的函数值严格意义上来讲就不是闭包,因为(x: Int) => x + 1在编写的时候就已经封闭了。但任何带有自由变量的函数文本,如(x: Int) => x + more,(其中more为自由变量)都是开放术语:open term。

如果more在闭包创建之后被改变了会发生什么事?

闭包会看到闭包之外做出的对more的变化。反过来也同样。闭包对捕获变量作出的改变在闭包之外也可见。

def makeIncreaser(more: Int) = (x: Int) => x + more

函数每次被调用时都会创建一个新闭包。每个闭包都会访问闭包创建时活跃的more变量。

重复参数

Scala允许你指明函数的最后一个参数可以是重复的。这可以允许客户向函数传入可变长度参数列表。想要标注一个重复参数,在参数的类型之后放一个星号。如:

def echo(args: String*) = for (arg <- args) println(arg)

将数组的每一个元素当作参数,如:

val arr = Array("What's", "up", "doc?")echo(arr: _*)//在数组参数后添加一个冒号和一个_*符号,告诉编译器把arr的每个元素当作参数

转载于:https://my.oschina.net/shajin/blog/158176

你可能感兴趣的文章
十周三次课
查看>>
2008 AD 复制有防火墙要开什么端口
查看>>
我的友情链接
查看>>
敏友的【敏捷个人】有感(11): 敏捷个人线下活动有感
查看>>
刺激用户危机意识,实现快速盈利的营销思维
查看>>
JUnit单元测试
查看>>
[logstash-input-file]插件使用详解
查看>>
植物大战僵尸
查看>>
原创文章
查看>>
理解JavaScript私有作用域
查看>>
BZOJ 1012: [JSOI2008]最大数maxnumber【线段树单点更新求最值,单调队列,多解】
查看>>
Drupal 7模板(主题钩子)的建议
查看>>
nginx配置文件中location说明
查看>>
连载-第1章绪论 1.1嵌入式系统概述
查看>>
UltraVNC
查看>>
详解synchronized
查看>>
Spring Cloud第二篇 创建一个Eureka Server
查看>>
初探数据双向绑定
查看>>
Webpack4 不深不浅的实践教程
查看>>
nginx1.9+做TCP代理(端口转发)
查看>>