【问题标题】:Splat operator and method overridingSplat 运算符和方法覆盖
【发布时间】:2015-03-13 02:15:57
【问题描述】:

我有一个带有子类的基类,这些子类覆盖了一个采用多个参数的方法。

class Parent
  def foo *bar
  end
end

class Child < Parent
  def foo bar, baz
  end
end

这很好用。但是,假设 Parent 中有一个方法 foobar 调用 foo:

def foobar *foo_args
  foo foo_args
end

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

【问题讨论】:

  • 我无法重现这个。您的代码在 Ruby 2.1 和 1.8.7 中对我来说很好。据我所知,您对父母和孩子之间必须匹配的方法签名是错误的。 Ruby 中没有这样的要求。这工作正常:pastebin.com/g5VgzKPX
  • 完全正确 - 在 Ruby 中,这只是运行时消息调度的问题。
  • 完全不清楚您要做什么。
  • 正确,我对签名有误。但是,从父级调用该方法仍然是一个问题。我将编辑问题以澄清。

标签: ruby overriding splat


【解决方案1】:

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

def foobar *foo_args
  foo(*foo_args)
end

不过,Child.new.foo 必须恰好采用两个参数才能不引发错误。

【讨论】:

  • 是的,就是这样。我只需要“解开”这个论点。谢谢。
猜你喜欢
  • 2019-04-07
  • 2013-07-04
  • 2012-04-25
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多