2016-12-01 3 views

答えて

-1
class Class 
    attr_accessor :x 
    attr_accessor :y 

    def to_attr_hash 
    hash = Hash.new 
    instance_variables.each do |v| 
     hash[v] = instance_variable_get(v) 
    end 
    hash 
    end 
end 

c = Class.new 

c.x = 'a' 
c.y = 'b' 

p c.to_attr_hash 

#=> {:@x=>"a", :@y=>"b"} 
+0

もう少し簡潔な(そしてもっとルビー的な)解は次のようになります: 'instance_variables.each_with_object({}){| var、hash | hash [var] = instance_variable_get(var)} ' – Anthony

+0

これは' attr_accessor'ではなく、インスタンス変数のリストです。ところで、Classクラスのような猿のパッチを当てるコアクラスは、慎重に* veeeeery *を実行する必要があります。 –

+0

'c = Class.new;を試してください。 c.instance_variable_set(:@ i_am_not_an_attr_accessor、42); c.to_attr_hash'と表示され、2つの 'attr_accessor'のどれも表示されませんが、' attr_accessor' *ではないものが表示されます。 –

関連する問題