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

时间:2019-12-26 15:03:12

标签: ruby

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 个答案:

答案 0 :(得分:5)

  

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

只有一个警告,文本分为两行。它的字面意思是: args应该转换为**args,这是产生此警告的调用,这里是为您提供方便的定义