Ruby

[Ruby]インスタンス変数名とその値をハッシュで取得する

instance_variables_and_valuesは引数で与えられたインスタンスについて、定義されたインスタンス変数名とその値をハッシュで取得するメソッドです。

class User
  def initialize(name, age)
    @name = name
    @age = age
  end
end

def instance_variables_and_values(instance)
  instance
    .instance_variables
    .map{ |sym| [sym, instance.instance_variable_get(sym)] }
    .to_h
end

taro = User.new('Taro', 20)
puts instance_variables_and_values(taro)
#=> {:@name=>"Taro", :@age=>20}

使ったメソッド

instance_variables

レシーバが持つ定義されたインスタンス変数名をシンボルの配列で返す

class User
  def initialize(name, age)
    @name = name
    @age = age
  end
end

taro = User.new('Taro', 20)
taro.instance_variables #=> [:@name, :@age]

instance_variable_get

レシーバが持つインスタンス変数の値を返す。引数にはインスタンス変数名をシンボルで与える

class User
  def initialize(name, age)
    @name = name
    @age = age
  end
end

taro = User.new('Taro', 20)
taro.instance_variable_get(:@name) #=> "Taro"
taro.instance_variable_get(:@age) #=> 20