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)
).
Ответы:
Есть одно предупреждение с текстом, разделенным на две строки. Он буквально говорит:
args
следует преобразовать в**args
, вот вызов, который произвел это предупреждение, вот его определение для вашего удобства .источник