日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Scala的操作符:任何方法都可以是操作符

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

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括洞頭網(wǎng)站建設(shè)、洞頭網(wǎng)站制作、洞頭網(wǎng)頁(yè)制作以及洞頭網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,洞頭網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到洞頭省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

編輯推薦:Scala編程語(yǔ)言專題

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

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

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

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

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

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

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

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

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

任何方法都可以是操作符

Scala里的操作符不是特殊的語(yǔ)言語(yǔ)法:任何方法都可以是操作符。使用方法的方式使它成為操作符。如果寫(xiě)成s.indexOf('o'),indexOf就不是操作符。不過(guò)如果寫(xiě)成,s indexOf 'o',那么indexOf就是操作符了,因?yàn)槟阋圆僮鞣麡?biāo)注方式使用它。

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

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

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

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

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

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

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

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

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

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

【相關(guān)閱讀】

  1. Scala的基本類型及文本化
  2. Scala程序及其Application特質(zhì)
  3. Scala程序中的分號(hào)推斷和Singleton對(duì)象
  4. 學(xué)習(xí)Scala類的定義,字段和方法
  5. 學(xué)習(xí)Scala腳本:從文件里讀取行記錄

網(wǎng)頁(yè)標(biāo)題:Scala的操作符:任何方法都可以是操作符
轉(zhuǎn)載來(lái)于:http://www.dlmjj.cn/article/codpcdo.html