被定义的方法“…”在这里定义


13

Ruby 2.7刚刚发布,并附带了有关“位置和关键字参数分离”的这些新警告(请参见其Release Post)。我在玩它,发现还有另外一个警告,我听不懂。

例:

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))时,这两个警告均消失。


1
有人知道如何禁止这些警告吗?我有弃用警告写到日志文件,但它不会影响这些警告。运行规范是红宝石2.7.0的噩梦
卡尔

Answers:


15

第二个警告是什么意思?它与第一个警告有关吗?

有一个警告,文本分为两行。它的字面意思是: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”在此被定义
Hackeron
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.