溫馨提示×

溫馨提示×

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

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

Scala簡化代碼的方法是什么

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

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

高階函數(shù)的另一個重要應(yīng)用是把它們放在API里使客戶代碼更簡潔。Scala的集合類型的特定用途循環(huán)方法提供了一個很好的例子。這些特定用途循環(huán)方法被定義在特質(zhì)Iterable中,被List,Set,Array,還有Map擴展。不過現(xiàn)在請注意其中的一個例子來看看為什么這些方法如此有用。

考慮exists,一個判斷傳入的值是否包含在集合中的方法。當(dāng)然你也可以初始化一個var為假,循環(huán)遍歷集合類型,檢查每個元素,并且如果你找到了要尋找的就把var設(shè)置為真,通過這樣的方式尋找元素。以下是使用了這種方式的方法去判斷是否傳入的List包含了負(fù)數(shù)的例子:

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

假如你在解釋器里定義了這個方法,你就可以這樣調(diào)用:

scala> containsNeg(List(1, 2, 3, 4))  res0: Boolean = false scala> containsNeg(List(1, 2, 3, -4))  res1: Boolean = true

不過更簡潔的定義這個方法的方式是通過在傳入的List上調(diào)用高階函數(shù)exists,如:

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

這個版本的containsNeg能產(chǎn)生和前面的那個一樣的結(jié)果:

scala> containsNeg(Nil)  res2: Boolean = false scala> containsNeg(List(0, 1, -2))  res3: Boolean = true

exists方法代表了控制抽象。是Scala庫提供的特定用途循環(huán)架構(gòu)而不是像while或for那樣內(nèi)建在Scala語言里的。上節(jié)中,高階函數(shù),filesMatching在對象FileMatcher的實現(xiàn)中減少了代碼重復(fù)。exists方法提供了類似的好處,但因為exists是公開在Scala的集合類型API里的,所以它減少的是API的客戶代碼中的重復(fù)。exists不存在的話,如果你想要寫一個containsOdd方法,檢測列表是否包含了奇數(shù),你或許會寫成這樣:

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

若你比較了containsNeg和containsOdd的函數(shù)體,你會發(fā)現(xiàn)除了if表達(dá)式之外,其它東西都是重復(fù)的。使用exists,你就可以這么寫:

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

這個版本的代碼體再一次與相應(yīng)的containsNeg方法的保持一致(使用了exists的版本),除了搜索的條件不同。然而代碼重復(fù)的量卻少得多,因為所有的循環(huán)架構(gòu)都被提取成exists方法本身了。

Scala的標(biāo)準(zhǔn)庫中還有許多其他循環(huán)方法。如果你能發(fā)現(xiàn)使用它們的機會,那么像exists一樣,它們經(jīng)常能縮短你的代碼。

“Scala簡化代碼的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI