omposição de funções de métodos, funções e funções parcialmente aplicadas no Scala
Algo semelhante a Stack Overflow questionCompose e andThen métodos, Eu tenho trabalhado através do TwitterScala School tutorial e rapidamente encontrei o mesmo problema que um comentarista tinha (o que foi ótimo, porque fui para a cama pensando que meu problema estava resolvido
No tutorial, ele define dois métodos como tais:
def addUmm(x: String) = x + " umm"
def addAhem(x: String) = x + " ahem"
e enquanto estiver nas versões mais recentes do Scala, você não pode chamar de composição nelas da seguinte forma:addUmm(_).compose(addAhem(_))
, a resposta aceita (e algumas das outras respostas parecem depender do fato de queaddUmm
eaddAhem
são métodos, não funções, que cria um problema ao tentar chamar de composição. Fui para a cama satisfeito, tendo executado com sucesso:
scala> ((s: String) => s + " umm").compose((s: String) => s + " ahem")
res0: String => java.lang.String = <function1>
Legal. O problema é que, embora não seja capaz de compor métodos, faz algum sentido, quando eu faço a mesma coisa com valores que sei avaliar paraFunction1
:
val a = (s: String) => s + " umm"
val b = (s: String) => s + " ahem"
val c = a(_).compose(b(_))
Bem, essa última linha tosse com o mesmo erro que a pergunta original, mesmo sendo aplicações parciais de funções, não métodos. Uma das respostas da pergunta original (altamente classificada, mas não a resposta aceita) parece sugerir que tem a ver com a forma como a aplicação parcial é expandida, qual é a explicação?
Para um novato no Scala, o fato de o inferenciador obtera(_).compose(b(_))
errado, não importa se você especificar explicitamente_: String
nos dois lugares, masa.compose(b)
faz é um pouco confus