Мы создаем метод с разбросанными аргументами и вызываем для него Method#parameters
:
def splatter(x, *y, z); end
params = method(:splatter).parameters
# => [[:req, :x], [:rest, :y], [:req, :z]]
Я ищу функцию f
, которая будет отображать список аргументов в соответствующие им имена переменных. Функция должна быть достаточно гибкой, чтобы работать с любым другим методом с произвольно размещенными аргументами знака знака. Например:
args = [:one, :two, :three, :four]
f(params, args)
# => [[:x, :one], [:y, :two], [:y, :three], [:z, :four]]
или что-то в этом роде (перевернутые элементы тоже подойдут). Я чувствую, что должно быть гибкое, элегантное решение, использующее inject
или что-то в этом роде, но я не могу его придумать.
RubyVM::InstructionSequence.of(method(:splatter))
). Если вы вызываетеto_a
, 12-й элемент содержит индексы различных конфигураций аргументов. К сожалению, я слишком устал, чтобы думать об этом дальше, но, надеюсь, это может быть полезно. - person Zach Kemp   schedule 01.10.2013