Мы создаем метод с splatted параметрами и вызвать Method#parameters
на нем:Карта восклицательный знак аргументы более параметров метода
def splatter(x, *y, z); end
params = method(:splatter).parameters
# => [[:req, :x], [:rest, :y], [:req, :z]]
Я ищу функцию, которая будет f
карте список аргументов на соответствующие им имена переменных. Функция должна быть достаточно гибкой, чтобы работать над любым другим методом с произвольно размещенными аргументами splat. Например:
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-й элемент содержит индексы различных конфигураций аргументов. К сожалению, я слишком устал, чтобы думать об этом дальше этого момента, но, надеюсь, это может быть полезно. –
Ницца, я не знал, что вы могли бы это сделать ... Мне нужно будет углубиться в InstructionSequence, чтобы узнать, какую информацию я могу получить от него. Благодаря! – rickyrickyrice
Если вы ищете тестовые примеры, вы можете найти [этот мой ответ] (http://stackoverflow.com/a/17173107/2988) полезным. –