Scala函數調用省略點號和括號shell
若是一個方法不用接受參數,你能夠無需括號就定義它。調用者也必須不加括號地調用它。若是你加上了空括號,那麼調用者能夠有選擇地加或者不加括號。例如,List 的size 方法沒有括號,因此你必須寫List(1,2,3).size。若是你嘗試寫List(1,2,3).size() 就會獲得一個錯誤。以下代碼,app
println(List(1, 2, 3).size) println(List(1, 2, 3).size())
運行並輸出,
函數
C:\WorkSpace6-scala\scala-train\src\com\usoft\traversing_mapping_so_on.scala:154: error: Int does not take parametersspa
println(List(1, 2, 3).size())scala
^code
one error foundstring
然而,String 類的length方法在定義時帶有括號,因此,"hello".length() 和"hello".length 均可以經過編譯。it
Scala 社區的約定是,在沒有反作用的前提下,省略調用方法時候的空括號。因此,查詢一個序列的大小(size)的時候能夠不用括號,可是定義一個方法來轉換序列的元素則應該寫上括號。編譯
以下示例,size 方法是List中獲得 List 大小的函數,調用時 能夠省略點號
社區
scala> List(1,2,3) size warning: there was one feature warning; re-run with -feature for details res4: Int = 3
在scala的腳本文件中這樣寫,
println("hello world" substring(0, 3))
運行並輸出,
C:\WorkSpace6-scala\scala-train\src\com\usoft>scala traversing_mapping_so_on.scala
hel
甚至這樣寫均可以,
println("hello world" substring(0, 3) toUpperCase() indexOf "h")
當函數 只接收一個參數時,就能夠使用花括號 代替 圓括號。以下,
// 定義一個柯里化的函數 def sum(i: Int)(j: (Int) => Int) = j(i) val res99 = sum(1) { i => i + 10 } println(res99) // 11 def p(x: Int): Unit = { println(x) } p { 2 }
運行並輸出,
C:\WorkSpace6-scala\scala-train\src\com\usoft>scala traversing_mapping_so_on.scala
11
2
===========END===========