【发布时间】:2021-04-28 19:05:24
【问题描述】:
我正在从 Ruby 2.7 升级到 3.0,但遇到了关键字参数更改的问题。
之前我们出于某些目的在代码中使用了 define_method。但是,随着关键字参数的变化,它不能再正确处理参数数组了。
class Foo
def test(a: 1, b: 2)
puts a
puts b
end
old_method = instance_method(:test)
define_method(:test) do |*args, &block|
old_method.bind(self).call(*args, &block)
end
end
Foo.new.test(a: 1)
这将引发 wrong number of arguments (given 1, expected 0) (ArgumentError)。它以前在 Ruby 2.7 中工作。我们可以做些什么来让 *args 再次工作?
【问题讨论】: