[英]In Ruby, how can I get instance variables in a hash instead of an array?
我有一個 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
?
要創建所有實例變量的哈希,可以使用以下代碼:
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
問題很老但是找到了rails解決方案: instance_values
這是谷歌的第一個答案,所以它可能會幫助某人。
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
對於 Ruby 2.6+,您可以將塊傳遞給to_h
方法,從而導致非常干燥的語法:
# Some instance variables
instance_variable_set(:@a, 'dog')
#=> "dog"
instance_variable_set(:@b, 'cat')
#=> "cat"
# Array of instance variable names
instance_variables
#=> [:@a, :@b]
# Hash of instance variable names and values, including leading @
instance_variables.to_h { |k| [k, instance_variable_get(k)] }
#=> { :@a => "dog", :@b => "cat" }
# Hash of instance variable names and values, excluding leading @
instance_variables.to_h { |k| [k[1..-1].to_sym, instance_variable_get(k)] }
#=> { :a => "dog", :b => "cat" }
Ruby on Rails有幾種內置的方法可以滿足您的需求。
user = User.new(first:'brian',last:'case')
user.attributes
{“first”=>“brian”,“last”=>“case”}
user.serializeable_hash
{“first”=>“brian”,“last”=>“case”}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.