我正在按照斯卡拉compose
和andThen
方法的教程Pattern matching & functional composition。有這樣一個例子:撰寫和然後方法
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
教程中的代碼有什麼問題?不是後者的表達與沒有括號的第一個表達式相同嗎?
爲了完整起見,andThen例子是這樣的:。 'VAL ahemThenUmm = addAhem(_)andThen(addUmm(_))' 時,它應該像 'VAL ahemThenUmm1 =(addAhem _)andThen(addUmm )' –
我不太確定用圓括號寫的部分;編譯器*不會*將方法自動轉換爲函數,至少對於Scala 2.10.2來說。解決方法是聲明'addAhem'和'addUmm'作爲函數,這樣'compose'或'和Then'就不用'_'工作。 –