【问题标题】:How to pass arguments passed in to another method?如何将传入的参数传递给另一个方法?
【发布时间】:2012-12-24 13:46:08
【问题描述】:

我正在使用 Ruby on Rails 3.2.9 和 Ruby 1.9.3。我正在尝试实现一个运行send 方法的方法,并且我想将传递给下级方法的参数传递给“发送”方法all。也就是说,给定

def method1(arg1, arg2 = true, *args)
  # ...
  self.class.send(:method2, # passing all arguments passed to method1, whatever those are)
end

然后我想将传递给method1(在本例中为arg1, arg2 = true, *args)的所有参数传递给method2

我应该如何做到这一点?例如,是否可以通过 send 使用 Ruby 的“splat”功能?

【问题讨论】:

标签: ruby methods parameters arguments parameter-passing


【解决方案1】:

您当前的方法签名 method1(arg1 = true, arg2, *args) 无效,因为如果您还使用 splat 可选参数,则具有默认值的参数必须位于所需参数之后。但是如果你把它改成:

method1(arg1, arg2 = true, *args)

那你就可以了

self.class.send(:method2, arg1, arg2, *args)

【讨论】:

  • 我希望将所有参数传递给method2,无论参数传递给method1顺便说一句:我更新了问题,以便不强调方法签名。
  • 实际上 ruby​​ 1.9 确实允许在开始时使用默认参数(例如,参见 igvita.com/2011/02/03/new-ruby-19-features-tips-tricks
  • @Backo 你可以使用Method#parameterseval 做一些hacky 但我不明白你为什么需要这样做。如果您在 method1 中编写代码,那么您知道它接受哪些参数,因此您可以按照上面的答案进行操作。也许您需要举一个更具体的例子来说明您正在尝试做什么?
  • @FrederickCheung 很酷,但我是否正确地说这也不能像 OP 那样在最后与可选参数结合使用?所以def method1(a = 1, b) 可以,但def method2(a = 1, b, *rest) 不行?
猜你喜欢
  • 2016-12-21
  • 1970-01-01
  • 2018-08-08
  • 2015-07-29
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多