O método chamado `… 'é definido aqui

13

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)).

lxxxvi
fonte
11
Alguém sabe como suprimir esses avisos? Tenho avisos de reprovação ao gravar no arquivo de log, mas não os afeta. Executar especificações é um pesadelo no ruby ​​2.7.0
Carl

Respostas:

15

O que significa o segundo aviso? Está relacionado ao primeiro aviso?

Há um único aviso com um texto dividido em duas linhas. Ele literalmente diz: argsdeve ser convertido para **args, aqui está a chamada que produziu esse aviso, aqui está sua definição para sua conveniência .

Aleksei Matiushkin
fonte
5
Bom obrigado! Pode ser que sou apenas eu, mas isso é bastante confuso ... #
277
2
@lxxxvi Não é só você. Eu vim aqui exatamente a mesma coisa - se for uma mensagem de erro, acho que deve ser uma mensagem de erro.
Jacob
Estou realmente confuso, estou vendo esse aviso e não há nada acima para o i18n.rb, este é um aviso de linha única, a linha acima se refere ao suporte ativo. O que devo fazer sobre esse aviso? </usr/local/lib/ruby/gems/2.7.0/gems/i18n-1.8.2/lib/i18n.rb:195: aviso: O método chamado `t 'é definido aqui
Hackeron