小编wwa*_*ang的帖子

Ruby 3.0 中的 Define_method 问题

我正在从 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)
Run Code Online (Sandbox Code Playgroud)

这将提高 wrong number of arguments (given 1, expected 0) (ArgumentError). 之前它可以在 Ruby 2.7 中运行。我们可以做些什么来让 *args 再次工作吗?

ruby ruby-3

2
推荐指数
1
解决办法
770
查看次数

标签 统计

ruby ×1

ruby-3 ×1