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