网站建设资讯

NEWS

网站建设资讯

Scala简化代码的方法是什么

本篇内容介绍了“Scala简化代码的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

成都创新互联公司公司2013年成立,先为寿光等服务建站,寿光等地企业,进行企业商务咨询服务。为寿光企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

高阶函数的另一个重要应用是把它们放在API里使客户代码更简洁。Scala的集合类型的特定用途循环方法提供了一个很好的例子。这些特定用途循环方法被定义在特质Iterable中,被List,Set,Array,还有Map扩展。不过现在请注意其中的一个例子来看看为什么这些方法如此有用。

考虑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

exists方法代表了控制抽象。是Scala库提供的特定用途循环架构而不是像while或for那样内建在Scala语言里的。上节中,高阶函数,filesMatching在对象FileMatcher的实现中减少了代码重复。exists方法提供了类似的好处,但因为exists是公开在Scala的集合类型API里的,所以它减少的是API的客户代码中的重复。exists不存在的话,如果你想要写一个containsOdd方法,检测列表是否包含了奇数,你或许会写成这样:

def containsOdd(nums: List[Int]): Boolean = {   var exists = false  for (num < - nums)    if (num % 2 == 1)     exists = true  exists  }

若你比较了containsNeg和containsOdd的函数体,你会发现除了if表达式之外,其它东西都是重复的。使用exists,你就可以这么写:

def containsOdd(nums: List[Int]) = nums.exists(_ % 2 == 1)

这个版本的代码体再一次与相应的containsNeg方法的保持一致(使用了exists的版本),除了搜索的条件不同。然而代码重复的量却少得多,因为所有的循环架构都被提取成exists方法本身了。

Scala的标准库中还有许多其他循环方法。如果你能发现使用它们的机会,那么像exists一样,它们经常能缩短你的代码。

“Scala简化代码的方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


本文名称:Scala简化代码的方法是什么
文章转载:http://cdweb.net/article/igdjos.html