Ruby Splat运算符和方法重写

Ruby Splat运算符和方法重写,ruby,overriding,splat,Ruby,Overriding,Splat,我有一个基类,它的子类重写了一个接受多个参数的方法 class Parent def foo *bar end end class Child < Parent def foo bar, baz end end 这会在对子实例调用时引发ArgumentError,因为foo_args是一个数组,而Child.new.foo需要两个对象。有办法解决这个问题吗?你的问题不清楚,但我认为这可能是你想要的: def foobar *foo_args foo(*foo_arg

我有一个基类,它的子类重写了一个接受多个参数的方法

class Parent
  def foo *bar
  end
end

class Child < Parent
  def foo bar, baz
  end
end

这会在对子实例调用时引发ArgumentError,因为foo_args是一个数组,而Child.new.foo需要两个对象。有办法解决这个问题吗?

你的问题不清楚,但我认为这可能是你想要的:

def foobar *foo_args
  foo(*foo_args)
end

尽管如此,
Child.new.foo
必须使用两个参数才能不引发错误。

我无法重现这一点。您的代码在Ruby 2.1和1.8.7中运行良好。据我所知,关于方法签名必须在父母和孩子之间匹配的说法是错误的。Ruby中没有这样的要求。这很好:没错——在Ruby中,这只是一个运行时消息调度的问题。根本不清楚您要做什么。正确,我对签名的理解是错误的。但是,从父级调用该方法仍然是一个问题。我将编辑问题以澄清。是的,就是这样。我只需要“解开”这个论点。非常感谢。
def foobar *foo_args
  foo(*foo_args)
end