Я следую руководству Сопоставление с образцом и функциональная композиция на 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
Что не так с кодом в учебнике? Разве последнее выражение не совпадает с первым без скобок?