博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
控制抽象之简化客户代码
阅读量:7209 次
发布时间:2019-06-29

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

  hot3.png

前一个例子演示了高阶函数能在你实现API的同时,帮助减少代码重复。高阶函数另一个重要应用是把它们放在API里使客户代码更简洁。scala的集合类型特定用途循环方法(这些特殊目的的循环方法定义在特质Iterable中,被ListSetArray、还有Map扩展)提供了一个很好的例子。

但这里我们先来看看命令式风格的例了,判断传入的List是否包含了负数:

def containsNeg(nums:List[Int]):Boolean = {    var exists = false    for(num <- nums) if(num < 0) exists = true    exists}

然后就可以这样调用:

215300_X6rq_168814.jpg

不过更简洁的定义方式是对传入的List调用高阶函数exists,如:

def containsNeg(nums:List[Int]) = nums.exists(_ < 0)

这个版本的containsNeg能产生和前面的那个一样的结果:

220307_s5xE_168814.jpg

exists方法代表了控制抽象。是scala库提供的特定用途循环架构而不是像while或for那样内建在scala语言里的因为exists是公开在scala的集合类型API里的,所以它减少的是API的客户代码中的重复。scala的标准库中还有许多其他循环方法。如果你能发现使用它们的机会,那么像exists一样,它们经常能缩短你的代码。

转载于:https://my.oschina.net/fhd/blog/277846

你可能感兴趣的文章
crontab 中 python(cx_Oracle)脚本执行时需要用户环境变量,怎么办??
查看>>
angular-file-upload 中文API
查看>>
angular指令中,require和transclude同时设置为true时的作用
查看>>
C++ 实用的小程序
查看>>
CentOS6.4/6.7下Mysql数据库的安装与配置(转载)
查看>>
10+年程序员总结的20+条经验教训
查看>>
百度地图API示例之设置级别setZoom与禁止拖拽disableDragging
查看>>
设置mysql远程连接root权限
查看>>
Yii2的Debug工具
查看>>
快速幂算法
查看>>
【基础进阶】URL详解与URL编码
查看>>
apache日志分析
查看>>
java 反射: 当Timestamp类型的属性值为null时,设置默认值
查看>>
vue-resource和vue-async-data两个插件的使用
查看>>
UISegmentedControl的基本用法
查看>>
ASP.NET 4.5.256 has not been registered on the Web server
查看>>
shell编程之文本与日志过滤
查看>>
重构中对设计模式的反思
查看>>
安卓Launcher之获取手机安装的应用列表,安卓launcher
查看>>
ElasticSearch 2 (10) - 在ElasticSearch之下(深入理解Shard和Lucene Index)
查看>>