您好,登錄后才能下訂單哦!
這篇文章主要講解了“Scala無參方法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Scala無參方法是什么”吧!
Scala類
正如我們所見,Scala是一門面向對象的語言,因此它擁有很多關于“類”的描述 。Scala類使用和Java類似的語法進行定義。但是一個重要的不同點在于Scala中的類可以擁有參數,這樣就可以得出我們下面關于對復數類(Complex)的定義:
class Complex(real: Double, imaginary: Double) {
def re() = real
def im() = imaginary
}
我們的復數類(Complex)接受兩個參數:實部和虛部。這些參數必須在實例化時進行傳遞,就像這樣:new Complex(1.5, 2.3)。類定義中包括兩個叫做re和im的方法,分別接受上面提到的兩個參數。
值得注意的是這兩個方法的返回類型并沒有顯式的聲明出來。他們會被編譯器自動識別。在本例中他們被識別為Double
但是編譯器并不總是像本例中的那樣進行自動識別。不幸的是關于什么時候識別,什么時候不識別的規則相當冗雜。在實踐中這通常不會成為一個問題,因為當編譯器處理不了的時候會發出相當的抱怨。作為一個推薦的原則,Scala的新手們通常可以試著省略類型定義而讓編譯器通過上下文自己判斷。久而久之,新手們就可以感知到什么時候應該省略類型,什么時候不應該。
無參方法
關于方法re和im還有一個小問題:你必須在名字后面加上一對括號來調用它們。請看下面的例子:
object ComplexNumbers {
def main(args: Array[String]) {
val c = new Complex(1.2, 3.4)
println("imaginary part: " + c.im())
}
}
你可能覺得吧這些函數當作變量使用,而不是當作函數進行調用,可能會更加令人感到舒服。事實上我們可以通過定義無參函數在Scala做到這點。這類函數與其他的具有0個參數的函數的不同點在于他們定義時不需要在名字后面加括弧,所以在使用時也不用加(但是無疑的,他們是函數),因此,我們的Complex類可以重新寫成下面的樣子;
class Complex(real: Double, imaginary: Double) {
def re = real
def im = imaginary
}
繼承和覆蓋
Scala中的所有類都繼承一個父類,當沒有顯示聲明父類時(就像上面定義的Complex一樣),它們的父類隱形指定為scala.AnyRef。
在子類中覆蓋父類的成員是可能的。但是你需要通過override修飾符顯示指定成員的覆蓋。這樣的規則可以避免意外覆蓋的情況發生。作為演示,我們在Complex的定義中覆蓋了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無參方法是什么”的內容了,經過本文的學習后,相信大家對Scala無參方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。