您好,登錄后才能下訂單哦!
本篇內(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ì)量的實用文章!
免責(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)容。