В Ruby 1.9.2 и более поздних версиях вы можете использовать метод parameters
для метода, чтобы получить список параметров для этого метода. Это вернет список пар с указанием имени параметра и его обязательности.
, например
Если вы делаете
def foo(x, y)
end
тогда
method(:foo).parameters # => [[:req, :x], [:req, :y]]
Вы можете использовать специальную переменную __method__
, чтобы получить имя текущего метода. Таким образом, внутри метода имена его параметров могут быть получены с помощью
args = method(__method__).parameters.map { |arg| arg[1].to_s }
Затем вы можете отобразить имя и значение каждого параметра с помощью
logger.error "Method failed with " + args.map { |arg| "#{arg} = #{eval arg}" }.join(', ')
Примечание: , поскольку этот ответ был изначально написан, в текущих версиях Ruby eval
больше нельзя вызывать с символом. Для решения этой проблемы был добавлен явный to_s
при построении списка имен параметров, т.е. parameters.map { |arg| arg[1].to_s }