Scala函數調用省略點號和括號

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===========

相關文章
相關標籤/搜索