簡體   English   中英

Scala函數文字中=>(向右雙箭頭)運算符的鏈接是什么意思?

[英]What is the meaning of the chaining of => (rightward double arrow) operator in Scala's function literal?

像這樣的代碼中=>運算符的鏈接是什么意思:

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

那么, =>的鏈接是否意味着currying?

更新:

第三種情況:

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))
}

與第一個示例相同,什么也不打印。

=>是右結合的,所以在你的第一個例子中,你正在呼吁與值的函數a ,它會返回一個函數String=>Unit (但從來沒有被抓住,獲得隱式轉換為Unit ,因為foreach )。 用括號可能會更清楚:

x => ((y: String) => println(x))

變成了

x => ((y: String) => println(x); ())

foreach ,因為它期望T => Unit

=> (不帶括號)的鏈接有點麻煩,是的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM