9.2 前一个例子演示了高阶函数能在你实现API的时候帮助减少代码重复。高阶函数的另一个重要应 用是把它们放在API里使客户代码更简洁。Scala的集合类型的特定用途循环方法提供了一个很好的例子 。这些特定用途循环方法被定义在特质Iterable中,被List,Set,Array,还有Map扩展。很多已经在第 三章的表格3.1中列了出来。不过现在请注意其中的一个例子来看看为什么这些方法如此有用。
考虑exists,一个判断传入的值是否包含在集合中的方法。当然你也可以初始化一个var为假,循环 遍历集合类型,检查每个元素,并且如果你找到了要寻找的就把var设置为真,通过这样的方式寻找元素 。以下是使用了这种方式的方法去判断是否传入的List包含了负数的例子:
def containsNeg(nums: List[Int]): Boolean = { var exists = false for (num < - nums) if (num < 0) exists = true exists }
假如你在解释器里定义了这个方法,你就可以这样调用:
scala> containsNeg(List(1, 2, 3, 4)) res0: Boolean = false scala> containsNeg(List(1, 2, 3, -4)) res1: Boolean = true
不过更简洁的定义这个方法的方式是通过在传入的List上调用高阶函数exists,如:
def containsNeg(nums: List[Int]) = nums.exists(_ < 0)
这个版本的containsNeg能产生和前面的那个一样的结果:
scala> containsNeg(Nil) res2: Boolean = false scala> containsNeg(List(0, 1, -2)) res3: Boolean = true
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索list
, 寻找源代码
, boolean
, 方法
, exists
, 例子
, 一个
判断list是否包含
,以便于您获取更多的相关知识。