这个不会为我的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是一个以上的参数,比如def这样):
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之间没有变化!

    08-16 03:45