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

В Ruby, как я могу получить переменные экземпляра в хэш вместо массива?

У меня есть класс Ruby. Я хочу получить переменную экземпляра из аргумента методу в этом классе. Я могу получить все переменные экземпляра в виде массива:

self.instance_variables

Однако я хочу получить переменную экземпляра с именем arg, в частности:

class MyClass
  def get_instance_variable(arg)
    hash_of_instance_variables[arg]
  end
end

object.get_instance_variable('my_instance_var')

Как вычислить hash_of_instance_variables?

4b9b3361

Ответ 1

Чтобы создать хэш всех переменных экземпляра, вы можете использовать следующий код:

class Object
  def instance_variables_hash
    Hash[instance_variables.map { |name| [name, instance_variable_get(name)] } ]
  end
end

Но как упоминалось в комментарии к кукурузе, вы должны использовать метод instance_variable_get:

object.instance_variable_get :@my_instance_var

Ответ 2

Вопрос довольно старый, но найденное решение rails для этого: instance_values

Это первый ответ в google, так что, возможно, это поможет кому-то.

Ответ 3

class MyClass    
def variables_to_hash
      h = {}
      instance_variables.each{|a|
        s = a.to_s
        n = s[1..s.size]
        v = instance_variable_get a
        h[n] = v
      }
      h
    end
end

Ответ 4

В Ruby on Rails есть несколько встроенных способов сделать это, чтобы вы могли найти свои потребности.

user = User.new(сначала: 'brian', last: 'case')

user.attributes

{ "first" = > "brian", "last" = > "case" }

user.serializeable_hash

{ "first" = > "brian", "last" = > "case" }