首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Ruby中传递splat参数

如何在Ruby中传递splat参数
EN

Stack Overflow用户
提问于 2016-03-03 09:22:50
回答 1查看 1.9K关注 0票数 4

给定一个类,该类的方法可以接受splat,例如,从ActiveRecord::FinderMethods获得的方法

代码语言:javascript
复制
class Settle
  def self.find(*args)
  end
end

我应该如何从另一个方法调用该方法,比如另一个类,以便它具有完全相同的签名?

代码语言:javascript
复制
class Settler
  def self.find(*args)
    Settle.find(*args)
  end
end

代码语言:javascript
复制
class Settler
  def self.find(*args)
    Settle.find(args)
  end
end

还是别的什么?请注意,--完全相同的签名--是重要的部分:Settler.find应该与Settle.find完全类似。

但是,我对允许Settler.find签名在Settle.find更改为完全不同的东西时神奇地更新的代码不感兴趣,比如.find(scope, *args)。在这种情况下,更新Settler中的版本没有问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-03 09:27:46

它应该是

代码语言:javascript
复制
Settle.find(*args)

这样,传递给Settler.find的所有参数也被传递给Settle.find,并存储在其中的args数组中。因此,这两个方法中的args数组都持有相同的值。

将参数作为“拆分”传递非常简单--它只是将数组作为单独的参数传递。所以如果你有

代码语言:javascript
复制
ar = [arg1, arg2, arg3, argn]

呼叫

代码语言:javascript
复制
some_method(*ar)

等于

代码语言:javascript
复制
some_method(arg1, arg2, arg3, argn)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35767962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档