Вызываемый метод `… 'определен здесь

13

Ruby 2.7 был только что выпущен, и он поставляется с этими новыми предупреждениями для «Разделения позиционных аргументов и ключевых слов» (см. Их публикацию ). Я играл с этим и обнаружил, что есть еще одно предупреждение, которое я не понимаю.

Пример:

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

Я думаю, что первое предупреждение об устаревании ясно, но второе предупреждение The called method `multiply' is defined hereменя смущает.

Что означает второе предупреждение? Это связано с первым предупреждением?

Оба предупреждения исчезают при добавлении **в вызов ( multiply(**args)).

LXXXVI
источник
1
Кто-нибудь знает, как подавить эти предупреждения? У меня есть предупреждения об устаревании записи в файл журнала, но это не влияет на них. Запуск спецификации - это кошмар в ruby ​​2.7.0
Карл

Ответы:

16

Что означает второе предупреждение? Это связано с первым предупреждением?

Есть одно предупреждение с текстом, разделенным на две строки. Он буквально говорит: argsследует преобразовать в **args, вот вызов, который произвел это предупреждение, вот его определение для вашего удобства .

Алексей Матюшкин
источник
5
Приятно спасибо! Может быть, это только я, но это довольно запутанно ...
lxxxvi
2
@ lxxxvi Это не только ты. Я пришел сюда точно так же - если это одно сообщение об ошибке, я чувствую, что это должно быть одно сообщение об ошибке.
Джейкоб
Я действительно запутался, я вижу это предупреждение, и для i18n.rb нет ничего выше, это предупреждение в одну строку, строка выше относится к активной поддержке. Что я должен делать с этим предупреждением? </usr/local/lib/ruby/gems/2.7.0/gems/i18n-1.8.2/lib/i18n.rb:195: предупреждение: здесь определяется вызываемый метод `t '
Хакерон