В 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
?
Ответы
Ответ 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" }