Scala 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
튜토리얼의 코드에 어떤 문제가 있습니까? 후자의 표현은 괄호가없는 첫 번째 표현과 동일하지 않습니까? compose
문서에서
는 andThen 예 보인다 같은 :.. '발 ahemThenUmm = addAhem (_) andThen (addUmm (_))' 가 '발 ahemThenUmm1 = (addAhem _) andThen과 같아야합니다 (addUmm)' –
나는 둥근 괄호 안에 쓰여진 부분에 대해서는 그렇게 확신하지 못한다; 컴파일러 *는 적어도 스칼라 2.10.2에서는 자동으로 함수를 변환하지 않습니다. 해결 방법은'addAhem'과'addUmm'을 함수로 선언하여'compose' 나'andThen'가'_'없이 작동하도록하는 것입니다. –