Je suis le tutoriel Pattern matching & functional composition sur Scala compose
et andThen
méthodes. Il y a un tel exemple:Composer et andThen méthodes
scala> def addUmm(x: String) = x + " umm"
scala> def addAhem(x: String) = x + " ahem"
val ummThenAhem = addAhem(_).compose(addUmm(_))
Lorsque je tente de l'utiliser, je reçois une erreur:
<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(_))
Cependant, cela fonctionne:
val ummThenAhem = addAhem _ compose addUmm _
ou même
val ummThenAhem = addAhem _ compose addUmm
Quel est le problème avec le code dans le tutoriel? Cette dernière expression n'est-elle pas la même que la première sans parenthèse?
Par souci de complétude, l'exemple andthen ressemble à:.. 'val ahemThenUmm = addAhem (_) andthen (addUmm (_))' quand il devrait ressembler 'val ahemThenUmm1 = (addAhem _) andthen (addUmm) ' –
Je ne suis pas si sûr de la partie écrite entre parenthèses; le compilateur * ne convertit pas la méthode pour fonctionner automatiquement, au moins pour Scala 2.10.2. La solution consiste à déclarer 'addAhem' et' addUmm' en tant que fonctions pour que 'compose' ou' andThen' fonctionne sans le '_'. –