На самом деле, вам нужно сделать резервную копию шага.
Вы неправильно понимаете, как работают брекеты.
scala> val is = (1 to 5).toList
is: List[Int] = List(1, 2, 3, 4, 5)
scala> is map ({ println("hi") ; 2 * _ })
hi
res2: List[Int] = List(2, 4, 6, 8, 10)
Если println
были частью функции передается map
, вы бы видеть больше приветствий.
scala> is map (i => { println("hi") ; 2 * i })
hi
hi
hi
hi
hi
res3: List[Int] = List(2, 4, 6, 8, 10)
Ваши дополнительные фигурные скобки представляют собой блок, который представляет собой некоторые операторы, за которыми следует выражение результата. Результат expr - это функция.
После того, как вы осознаете, что только результат expr имеет ожидаемый тип, который является ожидаемой функцией map
, вы бы не подумали использовать подчеркивание в предыдущих утверждениях, поскольку голой знак подчеркивания нуждается в ожидаемом типе, подчеркивание.
Это система типа, сообщающая вам, что ваше подчеркивание находится не в нужном месте.
Приложение: в комментариях вы спросите:
как я могу использовать синтаксис подчеркивания, чтобы связать параметр с функции литерал переменной
Является ли это «немой» вопрос, простите за выражение?
Подчеркнуто, что вам не нужно указывать параметр, тогда вы говорите, что хотите назвать его.
Одним из вариантов использования может быть: есть несколько входящих параметров, но меня интересует наименование только одного из них.
Скала> (0 /: есть) (_ + _) res10: Int = 15
Скала> (0 /: есть) {случай (соотв, я) => ACC + 2 * I} res11: Int = 30
Это не работает, но можно задаться вопросом, почему. То есть мы знаем, что ожидает флеш, мы хотим применить что-то с arg. Какой аргумент? Независимо от того, что осталось после частично примененной частичной функции.
Скала> (0 /: есть) (({случай (_ я) => _ + 2 * я}) (_))
или
Скала> (0 /: есть) (((case (_, i) => val d = 2 * i; _ + 2 * d}) (_))
SLS 6.23 «Синтаксис заполнителя для анонимных функций» упоминает границу «expr» для когда вы должны знать, что представляет собой символ подчеркивания - это не объем как таковой. Если вы укажете тип подписок для подчеркивания, он все равно будет жаловаться на ожидаемый тип, по-видимому, потому, что вывод типа идет слева направо.
http://stackoverflow.com/a/16502936/1296806 Подобный вопрос. Это показывает, что синтаксис неверен. –