Есть ли аналог метода Python vars () в Ruby? - PullRequest
3 голосов
/ 23 августа 2010

В Python есть метод vars (), который возвращает словарь имен локальных переменных в виде ключей и их значений, поэтому можно сделать что-то вроде этого:

a = 1
b = 2
"%(a)s %(b)s" % vars()

Есть ли в Ruby аналог vars ()? Самая близкая конструкция, о которой я могу подумать, это

local_variables.inject({}) {|res,var| res[var] = eval(var.to_s); res}

Ответы [ 2 ]

1 голос
/ 23 августа 2010

Вы можете реализовать это примерно так, но это не очень красиво.И, как указал Гнибблер, проще использовать интерполяцию.Единственное преимущество, которое я вижу в том, чтобы делать что-то подобное, - это если строка формата форматирует одни и те же значения несколько раз.И даже тогда, вероятно, было бы проще использовать пользовательский хеш (вместо выгрузки VAR в форматтер) или абстрагировать его в метод.

#!/usr/bin/env ruby

module Kernel
  def vars(b)
    Hash[
      (b.eval('local_variables')-[:_]).
      map{|v| [v,b.eval(v.to_s)]}
    ]
  end
end

a = 10
puts vars(binding)
1 голос
/ 23 августа 2010

Рубиновый эквивалент того, что вы делаете, это просто

"#{a} #{b}"

Есть ли другая причина, по которой вам нужно vars()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...