如何将多个参数作为数组传递给 ruby​​ 方法?

Posted

技术标签:

【中文标题】如何将多个参数作为数组传递给 ruby​​ 方法?【英文标题】:How do I pass multiple arguments to a ruby method as an array? 【发布时间】:2010-10-24 06:48:21 【问题描述】:

我在这样的 rails 帮助文件中有一个方法

def table_for(collection, *args)
 options = args.extract_options!
 ...
end

我希望能够像这样调用这个方法

args = [:name, :description, :start_date, :end_date]
table_for(@things, args)

这样我就可以根据表单提交动态传递参数。无法重写方法,因为我用的地方太多了,不然怎么办?

【问题讨论】:

【参考方案1】:

Ruby 可以很好地处理多个参数。

Here is 一个很好的例子。

def table_for(collection, *args)
  p collection: collection, args: args
end

table_for("one")
#=> :collection=>"one", :args=>[]

table_for("one", "two")
#=> :collection=>"one", :args=>["two"]

table_for "one", "two", "three"
#=> :collection=>"one", :args=>["two", "three"]

table_for("one", "two", "three")
#=> :collection=>"one", :args=>["two", "three"]

table_for("one", ["two", "three"])
#=> :collection=>"one", :args=>[["two", "three"]]

(从 irb 剪切和粘贴的输出)

【讨论】:

Programming Ruby, Thomas & Hunt, 2001 中有一个 very 类似的示例,并提供了更多解释。请参阅“更多关于方法”一章的“可变长度参数列表”部分。【参考方案2】:

就这样称呼吧:

table_for(@things, *args)

splat (*) 运算符将完成这项工作,而无需修改方法。

【讨论】:

这正是我想要的。 我试图从一个数组中为一个固定的方法组合参数,你的回答帮助感谢例如; method(*['a', '', nil].compact_blank)【参考方案3】:
class Hello
  $i=0
  def read(*test)
    $tmp=test.length
    $tmp=$tmp-1
    while($i<=$tmp)
      puts "welcome #test[$i]"
      $i=$i+1
    end
  end
end

p Hello.new.read('johny','vasu','shukkoor')
# => welcome johny
# => welcome vasu
# => welcome shukkoor

【讨论】:

你能不能再补充一个解释? 首先,创建一个指针test,它就像一个数组,然后,找到数组长度。然后我们必须迭代循环直到计数器达到长度。然后在循环中它将打印带有方法中所有争论的欢迎消息 i 在这里定义为全局变量。当类被加载时,它只会被设置为零一次。所以read 函数的第二次运行将永远无法工作。

以上是关于如何将多个参数作为数组传递给 ruby​​ 方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数组传递给接受带有 splat 运算符的属性的方法?

如何使用 JavaScript 将包含多个数组的数组作为参数化 URL 传递

如何从文件中将文本读入ruby中的数组

Rails - 如何将 id 数组作为隐藏字段的参数传递?

如何将多个参数作为单个向量传递给函数?

将数组作为 C++ 中方法的 const 参数传递