Методы Compose и andThen

Я следую руководству Сопоставление с образцом и функциональная композиция на Scala compose и andThen методы. Вот такой пример:

scala> def addUmm(x: String) = x + " umm"
scala> def addAhem(x: String) = x + " ahem"

val ummThenAhem = addAhem(_).compose(addUmm(_))

Когда я пытаюсь использовать его, я получаю сообщение об ошибке:

:7: error: missing parameter type for expanded function ((x$1) => addAhem(x$1).compose(((x$2) => addUmm(x$2))))
   val ummThenAhem = addAhem(_).compose(addUmm(_))
                             ^
:7: error: missing parameter type for expanded function ((x$2) => addUmm(x$2))
   val ummThenAhem = addAhem(_).compose(addUmm(_))
                                               ^
:7: error: type mismatch;
 found   : java.lang.String
 required: Int
     val ummThenAhem = addAhem(_).compose(addUmm(_))

Однако это работает:

val ummThenAhem = addAhem _ compose addUmm _

или даже

val ummThenAhem = addAhem _ compose addUmm

Что не так с кодом в учебнике? Разве последнее выражение не совпадает с первым без скобок?

47
задан Peter Mortensen 28 May 2013 в 18:16
поделиться