簡體   English   中英

在 Ruby 中,如何在哈希而不是數組中獲取實例變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM