博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scala学习手记26 - 重用函数值
阅读量:6201 次
发布时间:2019-06-21

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

函数值对消除代码重复有很大的帮助。但是像函数值这样直接将一个函数作为另一个函数的参数却不太利于函数值本身的重用。

来看一个例子:

class Equipment(val routine: Int => Int) {  def simulate(input: Int) = {    print("Running simulation...")    routine(input)  }}

在这个例子里将函数值作为参数传到了构造器中。

看一下如何使用:

val equipment1 = new Equipment({input=>println("calc with " + input); input})val equipment2 = new Equipment(input=>{println("calc with " + input); input})equipment1.simulate(4)equipment1.simulate(6)

执行结果如下:

上面的代码中还是出现了重复代码。新建实例equipment1和equipment2时,向Equipment构造函数中传递的函数值是一样的。要避免这样的函数值重复,可以将函数值赋给一个val,然后调用的时候直接使用val。就像下面这样:

val calculate = { input: Int => println("calc with " + input); input }val equipment1 = new Equipment(calculate)val equipment2 = new Equipment(calculate)equipment1.simulate(4)equipment1.simulate(6)

这里将函数值保存在一个val引用calculate中。请注意下,在这里需要声明函数值参数的类型。在之前是不需要的。那是因为scala可以推断出直接嵌入到函数中的函数值的参数类型。

实际上scala还支持一种更地道的方式:在需要函数值的地方可以传入普通函数。所以如下的代码也是可以的:

def calculate(input: Int) = {  println("calc with " + input)  input}val equipment1 = new Equipment(calculate)val equipment2 = new Equipment(calculate)

这样看起来更自然些,是不是。

就这样。

##########

转载于:https://www.cnblogs.com/amunote/p/5712910.html

你可能感兴趣的文章
(转)shell 脚本date时间格式
查看>>
19. 中介者模式
查看>>
系统提权方法大汇总
查看>>
Linux中更改转移mysql数据库目录的步骤
查看>>
我的友情链接
查看>>
MySQL一次死锁的问题
查看>>
DEPENDS工具和DUMPBIN工具使用
查看>>
端口占用,nginx不能启动
查看>>
python监控服务器信息
查看>>
网络分析工具
查看>>
Use zabbix to Monitor your servers
查看>>
证券行业日志审计需求分析,产品选型和实施建议
查看>>
pip 本地源
查看>>
PHP微信开发入门(二)
查看>>
Go语言的array,slice及map
查看>>
我的友情链接
查看>>
国内领先移动广告聚合平台--KeyMob聚合
查看>>
php 常用类总汇
查看>>
apache MPM介绍?
查看>>
XML与HTML的分析处理
查看>>