Подтвердить что ты не робот

Как передать несколько аргументов методу ruby ​​в виде массива?

У меня есть метод в вспомогательном файле rails, подобном этому

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

и я хочу, чтобы этот метод можно вызвать следующим образом

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

чтобы я мог динамически передавать аргументы, основанные на фиксации формы. Я не могу переписать метод, потому что я использую его во многих местах, как еще я могу это сделать?

4b9b3361

Ответ 1

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)

Ответ 2

Просто назовите его так:

table_for(@things, *args)

Оператор splat (*) выполнит задание без изменения метода.

Ответ 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