溫馨提示×

溫馨提示×

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

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

Scala的操作符怎么使用

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

本篇內(nèi)容主要講解“Scala的操作符怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Scala的操作符怎么使用”吧!

Scala為它的基本類型提供了豐富的操作符集。這些操作符實際只是作用在普通方法調(diào)用上華麗的語法。例如,1 + 2與(1).+(2)其實是一回事。換句話說,就是Int類包含了叫做+的方法,它帶一個Int參數(shù)并返回一個Int結(jié)果。這個+方法在兩個Int相加時被調(diào)用:

scala> val sum = 1 + 2 // Scala調(diào)用了(1).+(2)  sum: Int = 3

想要證實這點,可以把表達(dá)式顯式地寫成方法調(diào)用:

scala> val sumMore = (1).+(2)  sumMore: Int = 3

而真正的事實是,Int包含了許多帶不同的參數(shù)類型的重載:overload的+方法。重載的方法有同樣的名稱和不同的參數(shù)類型。例如,Int還有另一個也叫+的方法參數(shù)和返回類型為Long。如果你把Long加到Int上,這個替換的+方法就將被調(diào)用:

scala> val longSum = 1 + 2L // Scala調(diào)用了(1).+(2L)  longSum: Long = 3

符號+是操作符——更明確地說,是中綴操作符。操作符標(biāo)注不僅限于像+這種其他語言里看上去像操作符一樣的東西。你可以把任何方法都當(dāng)作操作符來標(biāo)注。例如,類String有一個方法indexOf帶一個Char參數(shù)。indexOf方法搜索String里***次出現(xiàn)的指定字符,并返回它的索引或-1如果沒有找到。你可以把indexOf當(dāng)作中綴操作符使用,就像這樣:

scala> val s = "Hello, world!" s: java.lang.String = Hello, world!  scala> s indexOf 'o' // Scala調(diào)用了s.indexOf(’o’)  res0: Int = 4

另外,String提供一個重載的indexOf方法,帶兩個參數(shù),分別是要搜索的字符和從哪個索引開始搜索。(前一個indexOf方法開始于索引零,也就是String開始的地方。)盡管這個indexOf方法帶兩個參數(shù),你仍然可以用操作符標(biāo)注的方式使用它。不過當(dāng)你用操作符標(biāo)注方式調(diào)用帶多個參數(shù)的方法時,這些參數(shù)必須放在括號內(nèi)。例如,以下是如何把另一種形式的indexOf當(dāng)作操作符使用的例子(接前例):

scala> s indexOf ('o', 5) // Scala調(diào)用了s.indexOf(’o’, 5)  res1: Int = 8

任何方法都可以是操作符

Scala里的操作符不是特殊的語言語法:任何方法都可以是操作符。使用方法的方式使它成為操作符。如果寫成s.indexOf('o'),indexOf就不是操作符。不過如果寫成,s indexOf 'o',那么indexOf就是操作符了,因為你以操作符標(biāo)注方式使用它。

目前為止,你已經(jīng)看到了中綴:infix操作符標(biāo)注的例子,也就是說調(diào)用的方法位于對象和傳遞給方法的參數(shù)或若干參數(shù)之間,如“7 + 2”。Scala還有另外兩種操作符標(biāo)注:前綴和后綴。前綴標(biāo)注中,方法名被放在調(diào)用的對象之前,如,-7里的‘-’。后綴標(biāo)注中,方法放在對象之后,如,“7 toLong”里的“toLong”。

與中綴操作符——操作符帶后兩個操作數(shù),一個在左一個在右——相反,前綴和后綴操作符都是一元:unary的:它們僅帶一個操作數(shù)。前綴方式中,操作數(shù)在操作符的右邊。前綴操作符的例子有-2.0,!found和~0xFF。與中綴操作符一致,這些前綴操作符是在值類型對象上調(diào)用方法的簡寫方式。然而這種情況下,方法名在操作符字符上前綴了“unary_”。例如,Scala會把表達(dá)式-2.0轉(zhuǎn)換成方法調(diào)用“(2.0).unary_-”。你可以輸入通過操作符和顯式方法名兩種方式對方法的調(diào)用來演示這一點:

scala> -2.0             // Scala調(diào)用了(2.0).unary_-  res2: Double = -2.0 scala> (2.0).unary_-  res3: Double = -2.0

可以當(dāng)作前綴操作符用的標(biāo)識符只有+,-,!和~。因此,如果你定義了名為unary_!的方法,就可以像!p這樣在合適的類型值或變量上用前綴操作符方式調(diào)用這個方法。但是如果你定義了名為unary_*的方法,就沒辦法用成前綴操作符了,因為*不是四種可以當(dāng)作前綴操作符用的標(biāo)識符之一。你可以像平常那用調(diào)用它,如p.unary_*,但如果嘗試像*p這么調(diào)用,Scala就會把它理解為*.p,這或許就不會是你想當(dāng)然的了!然而,不是一點兒希望都沒有。仍然有極微弱的機(jī)會,讓你的帶有*p的程序或許能像C++那樣被編譯。

后綴操作符是不用點或括號調(diào)用的不帶任何參數(shù)的方法。Scala里,你可以舍棄方法調(diào)用的空括號。例外就是如果方法帶有副作用就加上括號,如println(),不過如果方法沒有副作用就可以去掉括號,如String上調(diào)用的toLowerCase:

scala> val s = "Hello, world!" s: java.lang.String = Hello, world!  scala> s.toLowerCase  res4: java.lang.String = hello, world!

后面的這個例子里,方法沒帶參數(shù),或者還可以去掉點,采用后綴操作符標(biāo)注方式:

scala> s toLowerCase  res5: java.lang.String = hello, world!

例子里,toLowerCase被當(dāng)作操作數(shù)s上的后綴操作符。

因此要想知道Scala的值類型里你可以用哪些操作符,所有需要做的就是在Scala的API文檔里查詢定義在值類型上的方法。

到此,相信大家對“Scala的操作符怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向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