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


67

我在Rails助手文件中有这样的方法

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

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

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

这样我就可以基于表单提交动态传递参数。我无法重写该方法,因为我在很多地方都使用了它,那么我还能怎么做呢?

Answers:


93

Ruby很好地处理了多个参数。

这是一个很好的例子。

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剪切并粘贴的输出)


Ruby,Thomas和Hunt,2001年编程中有一个非常相似的示例,但有更多解释。请参见“更多关于方法”一章的“可变长度参数列表”。
Jared Beck


0
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

2
您还能补充说明吗?
罗伯特

首先,创建一个类似于数组的指针测试,然后找到数组长度。然后我们必须迭代循环,直到计数器达到长度为止。然后在循环中,它将使用方法中的所有争论打印欢迎消息
Anoob K Bava 2015年

1
i在这里定义为全局变量。加载类后,它将仅设置为零一次。因此第二次运行read将永远无法进行。
2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.