O Ruby 2.7 acabou de ser lançado e vem com esses novos avisos para "Separação de argumentos posicionais e de palavras-chave" (consulte o Post da versão ). Eu estava brincando e descobri que há outro aviso, que eu não entendo.
Exemplo:
def multiply(x:, y:)
x * y
end
args = { x: 2, y: 3 }
multiply(args)
# ./warning.rb:7: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
# ./warning.rb:1: warning: The called method `multiply' is defined here
Eu acho que o primeiro aviso sobre a depreciação é claro, mas o segundo aviso The called method `multiply' is defined here
é confuso para mim.
O que significa o segundo aviso? Está relacionado ao primeiro aviso?
Os dois avisos desaparecem ao adicionar **
à chamada ( multiply(**args)
).
Respostas:
Há um único aviso com um texto dividido em duas linhas. Ele literalmente diz:
args
deve ser convertido para**args
, aqui está a chamada que produziu esse aviso, aqui está sua definição para sua conveniência .fonte