2014-07-23 3 views
0

Может кто-то пожалуйста, объясните этот кусок кода:Confused о синтаксисе Scala

val ns: Iterator[Int] = (1 to 3).iterator 
ns.map(_ =>() => block) 

где

block: => Future[T] 

В основном я просто запутался о том, что происходит с _, => и Unit () синтаксис. То, как я пытаюсь это прочитать, - «сопоставить функцию, которая возвращает функцию, которая не принимает никаких параметров и возвращает Future [T] по списку целых чисел». Это верно? Я всегда смущен, когда вижу несколько операторов =>.

+0

Я нахожу этот ответ на @Daniel C. Собрал как лучшее объяснение до настоящего времени: http://stackoverflow.com/questions/4543228/whats-the-difference-between-and-unit/4545703#4545703 –

ответ

2

Да, вы правы.

Он разбирается так:

ns.map(_ => (() => block)) 

И синтаксис () => ? просто определить функцию без параметров:

val f =() => 1 
f() // 1 

Так целое число в ns игнорируется, и вы просто получаете итератор функций которые не принимают параметров и возвращают фьючерсы: Iterator[() => Future[T]].

+0

Таким образом, ассоциативный арифметический оператор =? (это оператор?) – jcm

0

Я думаю, что это блок: => Будущее [T] возможно подпись метода. Это означает вызов по имени. В принципе, вы можете понять, что это просто тип будущего [T], который ленится оценены, но не функция

val ns: Iterator[Int] = (1 to 3).iterator 
ns.map(_ =>() => block) 

Это вернет итератор [() => Future], так что да, вы правы, это преобразуется в функцию, которая ничего не делает для будущего. Хорошо, что он не будет оценивать Будущее немедленно, он будет вызываться при вызове.

val result = ns.map(_ =>() => block) 

result.foreach(_())