web-dev-qa-db-ja.com

複数の引数を配列としてRubyメソッドに渡すにはどうすればよいですか?

Railsこのようなヘルパーファイルにメソッドがあります

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

そして、私はこのようにこのメソッドを呼び出すことができるようにしたい

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

そのため、フォームコミットに基づいて引数を動的に渡すことができます。メソッドをあまりにも多くの場所で使用しているため、メソッドを書き換えることはできません。他にこれを行うにはどうすればよいですか?

63
Chris Drappier

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からの出力の切り取りと貼り付け)

89
sean lynch

次のように呼び出します。

table_for(@things, *args)

splat*)演算子は、メソッドを変更することなくジョブを実行します。

56