9.2 前一个例子演示了高阶函数能在你实现API的时候帮助减少代码重复。高阶函数的另一个重要应用是把它们放在API里使客户代码更简洁。Scala的集合类型的特定用途循环方法提供了一个很好的例子。这些特定用途循环方法被定义在特质Iterable中,被List,Set,Array,还有Map扩展。很多已经在第三章的表格3.1中列了出来。不过现在请注意其中的一个例子来看看为什么这些方法如此有用。
51CTO编辑推荐:Scala编程语言专题
考虑exists,一个判断传入的值是否包含在集合中的方法。当然你也可以初始化一个var为假,循环遍历集合类型,检查每个元素,并且如果你找到了要寻找的就把var设置为真,通过这样的方式寻找元素。以下是使用了这种方式的方法去判断是否传入的List包含了负数的例子:
def containsNeg(nums: List[Int]): Boolean = {
var exists = false
for (num < - nums)
if (num < 0)
exists = true
exists
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
scala> containsNeg(List(1, 2, 3, 4))
res0: Boolean = false
scala> containsNeg(List(1, 2, 3, -4))
res1: Boolean = true
- 1.
- 2.
- 3.
- 4.
def containsNeg(nums: List[Int]) = nums.exists(_ < 0)
- 1.
scala> containsNeg(Nil)
res2: Boolean = false
scala> containsNeg(List(0, 1, -2))
res3: Boolean = true
- 1.
- 2.
- 3.
- 4.
def containsOdd(nums: List[Int]): Boolean = {
var exists = false
for (num < - nums)
if (num % 2 == 1)
exists = true
exists
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
def containsOdd(nums: List[Int]) = nums.exists(_ % 2 == 1)
- 1.
Scala的标准库中还有许多其他循环方法。如果你能发现使用它们的机会,那么像exists一样,它们经常能缩短你的代码。
【相关阅读】