0
什麼是=>
運營商的鏈接的意義就像這個代碼:在Scala的函數文字中,鏈接=>(向右雙箭頭)運算符的含義是什麼?
val a = Array("I", "love", "Scala Johnson")
a.foreach {
x => y: String => println(x)
}
它打印出來罷了。
那麼發生了什麼? x
彙編失敗了嗎?
如果我刪除從y
參數String
類型聲明:
x => y => println(x)
我"missing parameter type"
編譯錯誤。
然後我做了一個實驗:
val hotFunc: Int => Int => Unit = x => y => println(x * y)
hotFunc(2)(11)
它打印出來22
。
那麼,=>
的鏈接是否意味着咖喱?
UPDATE:
第三案:
def readFile[T](f: File)(handler: FileInputStream => T): T = {
val resource = new java.io.FileInputStream(f)
try {
handler(resource)
} finally {
resource.close()
}
}
val bs = new Array[Byte](4)
readFile(new File("Slurp.scala")) {
input => b: Byte => println("Read: " + (input.read(bs) + b))
}
這同樣與第1例,打印出來罷了。
謝謝,但我仍然有點困惑。請看第三個例子,那裏發生了什麼? – null
@suud你還沒有調用返回的'Byte => Unit'函數,所以這也是第三個例子的預期行爲(我認爲它在你可以讀之前關閉了流,所以調用該函數很可能會導致' IOException')。 –
好吧,我現在明白了。 'readFile'返回一個函數值('b:Byte => println(「Read:」+(input.read(bs)+ b)',類型爲Byte => Unit),它不執行函數值內部的代碼,這就是爲什麼沒有打印出來。 – null