Я следую учебному руководству Соответствие шаблонов и функциональная композиция в Scala compose
и andThen
. Вот такой пример:
scala> def addUmm(x: String) = x + " umm"
scala> def addAhem(x: String) = x + " ahem"
val ummThenAhem = addAhem(_).compose(addUmm(_))
Когда я пытаюсь его использовать, я получаю сообщение об ошибке:
<console>:7: error: missing parameter type for expanded function ((x$1) => addAhem(x$1).compose(((x$2) => addUmm(x$2))))
val ummThenAhem = addAhem(_).compose(addUmm(_))
^
<console>:7: error: missing parameter type for expanded function ((x$2) => addUmm(x$2))
val ummThenAhem = addAhem(_).compose(addUmm(_))
^
<console>: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
Что не так с кодом в учебнике? Разве последнее выражение не совпадает с первым без круглых скобок?