溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Scala簡化代碼的方法是什么

發布時間:2021-12-10 18:25:10 來源:億速云 閱讀:153 作者:iii 欄目:編程語言

本篇內容介紹了“Scala簡化代碼的方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

高階函數的另一個重要應用是把它們放在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簡化代碼的方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女