Currying um proc com argumentos de palavra-chave
Digamos que eu tenho um genéricoProc
, Lambda
oumethod
que usa um segundo argumento opcional:
pow = -> (base, exp: 2) { base**exp }
Agora eu quero curry esta função, dando-lhe umaexp
do3
.
cube = pow.curry.call(exp: 3)
Há uma ambiguidade aqui, decorrente dos argumentos das palavras-chave e da nova sintaxe de hash, na qual Ruby interpretaexp: 3
como um hash sendo passado como o primeiro argumento,base
. Isso resulta na invocação imediata da função, renderizando umNoMethodError
quando#**
é enviado para o hash.
Definir um valor padrão para o primeiro argumento resultará da mesma forma na invocação imediata da função durante o curry, e se eu marcar o primeiro argumento como necessário, sem fornecer um padrão:
pow = -> (base:, exp: 2) { base**exp }
o intérprete vai reclamar que estou faltando argumentobase
quando tento curry oProc
.
Como curry uma função com o segundo argumento?