此代码中=>
运算符链接的含义是什么:
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))
}
与第一个例子相同,没有打印出来。
答案 0 :(得分:0)
=>
是右关联的,所以在你的第一个例子中,你调用一个值为a
的函数,它返回一个函数String=>Unit
(但是永远不会被捕获,得到由于Unit
而隐式转换为foreach
。括号中可能会更清楚:
x => ((y: String) => println(x))
转向
x => ((y: String) => println(x); ())
<{1>}中的,因为它需要foreach
。
T => Unit
的链接(没有括号)有点讨好,是的。