链接的含义是什么=> Scala函数文字中的(向右双箭头)运算符?

时间:2015-01-01 10:43:16

标签: scala

此代码中=>运算符链接的含义是什么:

val a = Array("I", "love", "Scala Johnson")
a.foreach {
    x => y: String => println(x)
}

没有打印出来。

那发生了什么?汇编中x是否丢失了?

如果我从String参数中删除了y类型声明:

x => y => println(x)

我得到"missing parameter type"编译错误。

然后我做了一个实验:

val hotFunc: Int => Int => Unit = x => y => println(x * y)
hotFunc(2)(11)

打印出22

那么,=>的链接是否意味着干嘛?

更新

第三种情况:

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 个答案:

答案 0 :(得分:0)

=>是右关联的,所以在你的第一个例子中,你调用一个值为a的函数,它返回一个函数String=>Unit(但是永远不会被捕获,得到由于Unit而隐式转换为foreach。括号中可能会更清楚:

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

转向

x => ((y: String) => println(x); ())
<{1>}中的

,因为它需要foreach

T => Unit的链接(没有括号)有点讨好,是的。