这个不会为我的Scala 2.7.7.final或2.8.0.final编译:
new FileInputStream("test.txt") getChannel transferTo(
0, Long.MaxValue, new FileOutputStream("test-copy.txt") getChannel)
这个确实为我的Scala 2.7.7.final和2.8.0.final编译:
new FileInputStream("test.txt") getChannel() transferTo(
0, Long.MaxValue, new FileOutputStream("test-copy.txt") getChannel)
为什么在这里我需要做
getChannel()
而不是getChannel
? 最佳答案
原因很简单。如果您使用空格而不是。来链接方法调用,则:
a b c d //is parsed as a call to
(a.b(c))(d)
在您的情况下,最后两个参数的调用方式如下(因为
d
是一个以上的参数,比如d
,e
和f
这样):a b c(d, e, f) //is parsed as a call to
a.b(c(d, e, f))
即与第一种情况相同。但是,您希望呼叫为:
(a b).c(d, e, f)
哪个不一样!
a = new FileInputStream("test.txt")
b = getChannel
c = transferTo
d = new FileOutputStream("test-copy.txt") getChannel
e = 0
f = Long.MaxValue
据我所知,这在2.7和2.8之间没有变化!