私はScala compose
とandThen
メソッドでチュートリアルPattern matching & functional compositionに従っています。そのような例があります: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
チュートリアルのコードで何が問題になっていますか?後者の表現は括弧のない最初の表現と同じではないのですか? compose
ドキュメントから
は、andThenの例は次のようになります。。 'ヴァルahemThenUmm = addAhem(_)andThen(addUmm(_))' それは 'ヴァルahemThenUmm1 =(addAhem _)andThenのようになります(addUmm ) ' –
私は丸い括弧で書かれた部分についてはあまりよく分かりません。少なくともScala 2.10.2では、コンパイラ*はメソッドを自動的に関数に変換しません。回避策は、 'addAhem'と' addUmm'を関数として宣言し、 'compose'や' andThen'が '_'なしで動くようにすることです。 –