scala學習手記20 - 方法返回類型推斷


除了推演變量的類型,scala也會推演方法的返回類型。不過這里有一處需要注意:方法返回類型的推演依賴於方法的定義方式。如果用等號“=”定義方法,scala就會推演方法返回類型;否則,它就認為方法的返回為void。看一個例子:

def printMethodInfo(methodName: String) {
  println("The return type of " + methodName + " is "
      + getClass().getDeclaredMethod(methodName).getReturnType().getName())//此處教材中的代碼存在問題,去掉了getDeclaredMethod調用的中第二個參數null
}

def method1() { 6 }
def method2() = { 6 }
def method3() = 6
def method4: Double = 6

printMethodInfo("method1")
printMethodInfo("method2")
printMethodInfo("method3")
printMethodInfo("method4")

其中方法一是按照習慣方式定義的,方法二則是使用等號定義的。兩個方法都很簡單,二者唯一的差別就是定義時有沒有使用等號。這一點差別決定了scala是否會對方法的返回類型進行推演。看一下上面代碼的執行結果:

image

代碼執行結果和預期一致(請忽略前幾行的警告)。

如果方法體很簡單,可以寫成一個表達式,那么環繞方法體的花括號就可以去掉,就像方法三一樣。還有前面應該也提到過,如果方法沒有參數的話,括號也是可以省略掉的,這就是方法四的定義方式。

此外,還可以顯式聲明類型。這里將方法四的返回值聲明為Double。雖然實際上方法四的返回值是一個Int值,不過只要返回值與聲明的返回類型兼容就好,因此也可以將方法四的返回類型聲明為為Unit、Short、Long、Float等等。如果聲明的返回類型與實際返回值不兼容的話,scala就會報出一個類型不匹配的編譯時錯誤。

方法返回類型推斷還和之前提到的關於return的用法有些關聯:如果沒有寫return關鍵字,方法調用會自動返回最后一個求值的表達式。

總的來說,使用=,讓Scala推演方法的類型會好一些。這樣可以少擔心一件事,讓構建良好的類型推演為我們服務。

#######


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM