Scala 方法與函數
Scala 有方法與函數,二者在語義上的區別很小。Scala 方法是類的一部分,而函數是一個對象可以賦值給一個變數。換句話來說在類中定義的函數即是方法。
Scala 中的方法跟 Java 的類似,方法是組成類的一部分。
Scala 中的函數則是一個完整的對象,Scala 中的函數其實就是繼承了 Trait 的類的對象。
Scala 中使用 val 語句可以定義函數,def 語句定義方法。
class Test{ def m(x: Int) = x + 3 val f = (x: Int) => x + 3 }
注意:有些翻譯上函數(function)與方法(method)是沒有區別的。
方法聲明
Scala 方法聲明格式如下:
def functionName ([參數列表]) : [return type]
如果你不寫等於號和方法主體,那麼方法會被隱式聲明為抽象(abstract),包含它的類型於是也是一個抽象類型。
方法定義
方法定義由一個 def 關鍵字開始,緊接著是可選的參數列表,一個冒號 : 和方法的返回類型,一個等於號 = ,最後是方法的主體。
Scala 方法定義格式如下:
def functionName ([參數列表]) : [return type] = { function body return [expr] }
以上代碼中 return type 可以是任意合法的 Scala 數據類型。參數列表中的參數可以使用逗號分隔。
以下方法的功能是將兩個傳入的參數相加並求和:
object add{ def addInt( a:Int, b:Int ) : Int = { var sum:Int = 0 sum = a + b return sum } }
如果方法沒有返回值,可以返回為 Unit,這個類似於 Java 的 void, 實例如下:
object Hello{ def printMe( ) : Unit = { println("Hello, Scala!") } }
方法調用
Scala 提供了多種不同的方法調用方式:
以下是調用方法的標準格式:
functionName( 參數列表 )
如果方法使用了實例的對象來調用,我們可以使用類似java的格式 (使用 . 號):
[instance.]functionName( 參數列表 )
以上實例演示了定義與調用方法的實例:
object Test { def main(args: Array[String]) { println( "Returned Value : " + addInt(5,7) ); } def addInt( a:Int, b:Int ) : Int = { var sum:Int = 0 sum = a + b return sum } }
執行以上代碼,輸出結果為:
$ scalac Test.scala $ scala Test Returned Value : 12
Scala 也是一種函數式語言,所以函數是 Scala 語言的核心。以下一些函數概念有助於我們更好的理解 Scala 編程:
函數概念解析接案例 | ||
---|---|---|
函數傳名調用(Call-by-Name) | 指定函數參數名 | |
函數 - 可變參數 | 遞歸函數 | |
默認參數值 | 高階函數 | |
內嵌函數 | 匿名函數 | |
偏應用函數 | 函數柯裏化(Function Currying) |