Странные вещи с функцией каррирования

У меня странная ситуация, которую я не понимаю. Я читаю книгу «Программирование на Scala», гл. 9.

Допустим, у меня есть каррированная функция:

def withThis(n:Int)(op:Int=>Unit){
      println("Before")
      op(n);
      println("After")
}

Когда я вызываю ее с одним аргументом внутри специального фигурного синтаксиса, она работает, как ожидалось:

withThis(5){
   (x) => {println("Hello!"); println(x); }
}
// Outputs
Before
Hello!
5
After

Однако, если я помещаю два оператора, я получаю что-то странное:

withThis(5){
     println("Hello!")
     println(_)
}
// Outputs
Hello!
Before
5
After

Как получилось "Привет!" печатается перед "До", а затем "5" печатается внутри? Я что, сумасшедший?

7
задан Jean-Philippe Pellet 28 April 2011 в 20:45
поделиться