11

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ますか?

4

4 に答える 4

23

すべてのインスタンス変数のハッシュを作成するには、次のコードを使用できます。

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
于 2011-12-07T14:55:59.673 に答える
11

質問はかなり古いですが、これに対する Rails ソリューションが見つかりました: instance_values

これはグーグルでの最初の回答なので、誰かに役立つかもしれません。

于 2014-10-20T13:14:13.643 に答える
1
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
于 2011-12-07T14:05:54.990 に答える
-1

Ruby on Rails には、これを行うための組み込みの方法がいくつかあり、ニーズを満たすことができます。

ユーザー = User.new(最初: 'ブライアン'、最後: 'ケース')

ユーザー属性

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

user.serializeable_hash

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

于 2016-03-25T22:59:03.427 に答える