我在Rails助手文件中有这样的方法
def table_for(collection, *args)
options = args.extract_options!
...
end
我希望能够像这样调用此方法
args = [:name, :description, :start_date, :end_date]
table_for(@things, args)
这样我就可以基于表单提交动态传递参数。我无法重写该方法,因为我在很多地方都使用了它,那么我还能怎么做呢?
Answers:
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剪切并粘贴的输出)
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
i
在这里定义为全局变量。加载类后,它将仅设置为零一次。因此第二次运行read
将永远无法进行。