溫馨提示×

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

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

Scala無(wú)參方法是什么

發(fā)布時(shí)間:2021-12-09 09:08:54 來(lái)源:億速云 閱讀:157 作者:iii 欄目:編程語(yǔ)言

這篇文章主要講解了“Scala無(wú)參方法是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Scala無(wú)參方法是什么”吧!

Scala類(lèi)

正如我們所見(jiàn),Scala是一門(mén)面向?qū)ο蟮恼Z(yǔ)言,因此它擁有很多關(guān)于“類(lèi)”的描述 。Scala類(lèi)使用和Java類(lèi)似的語(yǔ)法進(jìn)行定義。但是一個(gè)重要的不同點(diǎn)在于Scala中的類(lèi)可以擁有參數(shù),這樣就可以得出我們下面關(guān)于對(duì)復(fù)數(shù)類(lèi)(Complex)的定義:

class Complex(real: Double, imaginary: Double) {
     
def re() = real
     
def im() = imaginary
}

我們的復(fù)數(shù)類(lèi)(Complex)接受兩個(gè)參數(shù):實(shí)部和虛部。這些參數(shù)必須在實(shí)例化時(shí)進(jìn)行傳遞,就像這樣:new Complex(1.5, 2.3)。類(lèi)定義中包括兩個(gè)叫做re和im的方法,分別接受上面提到的兩個(gè)參數(shù)。

值得注意的是這兩個(gè)方法的返回類(lèi)型并沒(méi)有顯式的聲明出來(lái)。他們會(huì)被編譯器自動(dòng)識(shí)別。在本例中他們被識(shí)別為Double

但是編譯器并不總是像本例中的那樣進(jìn)行自動(dòng)識(shí)別。不幸的是關(guān)于什么時(shí)候識(shí)別,什么時(shí)候不識(shí)別的規(guī)則相當(dāng)冗雜。在實(shí)踐中這通常不會(huì)成為一個(gè)問(wèn)題,因?yàn)楫?dāng)編譯器處理不了的時(shí)候會(huì)發(fā)出相當(dāng)?shù)谋г?。作為一個(gè)推薦的原則,Scala的新手們通??梢栽囍÷灶?lèi)型定義而讓編譯器通過(guò)上下文自己判斷。久而久之,新手們就可以感知到什么時(shí)候應(yīng)該省略類(lèi)型,什么時(shí)候不應(yīng)該。

無(wú)參方法

關(guān)于方法re和im還有一個(gè)小問(wèn)題:你必須在名字后面加上一對(duì)括號(hào)來(lái)調(diào)用它們。請(qǐng)看下面的例子:

object ComplexNumbers {
     
def main(args: Array[String]) {
              val c
= new Complex(1.2, 3.4)
              println
("imaginary part: " + c.im())
     
}
}

你可能覺(jué)得吧這些函數(shù)當(dāng)作變量使用,而不是當(dāng)作函數(shù)進(jìn)行調(diào)用,可能會(huì)更加令人感到舒服。事實(shí)上我們可以通過(guò)定義無(wú)參函數(shù)在Scala做到這點(diǎn)。這類(lèi)函數(shù)與其他的具有0個(gè)參數(shù)的函數(shù)的不同點(diǎn)在于他們定義時(shí)不需要在名字后面加括弧,所以在使用時(shí)也不用加(但是無(wú)疑的,他們是函數(shù)),因此,我們的Complex類(lèi)可以重新寫(xiě)成下面的樣子;

class Complex(real: Double, imaginary: Double) {
     
def re = real
     
def im = imaginary
}

 繼承和覆蓋

Scala中的所有類(lèi)都繼承一個(gè)父類(lèi),當(dāng)沒(méi)有顯示聲明父類(lèi)時(shí)(就像上面定義的Complex一樣),它們的父類(lèi)隱形指定為scala.AnyRef。

在子類(lèi)中覆蓋父類(lèi)的成員是可能的。但是你需要通過(guò)override修飾符顯示指定成員的覆蓋。這樣的規(guī)則可以避免意外覆蓋的情況發(fā)生。作為演示,我們?cè)贑omplex的定義中覆蓋了Object的toString方法。

class Complex(real: Double, imaginary: Double) {
     
def re = real
     
def im = imaginary
     
override def toString() =
             
"" + re + (if (im < 0) "" else "+") + im + "i"
}

感謝各位的閱讀,以上就是“Scala無(wú)參方法是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Scala無(wú)參方法是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

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

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

AI