2012-03-20 11 views
0

私はRubyでクラスを作成しましたが、そのメンバーにアクセスするためにメソッド[]を定義したいと考えています(すべてのメンバーはpublicです)。たとえば、次のような単純なクラスのために:ルビクラスのクラスメンバーにアクセスするための[]メソッドを定義するにはどうすればよいですか?

class Boy 
    attr_accessor :name, :age 
    def initialize(n, a) 
    @name = n 
    @age = a 
    end 
end 

私は、次の任意の助け

b = Boy.new(Tom, 23) 
b.name  # Tom 
b[:name]  # Tom 

同じしてくださいになりたいですか?事前に感謝

答えて

1
class Boy 
    attr_accessor :name, :age 
    def initialize(n, a) 
    @name = n 
    @age = a 
    end 

    def [](key) 
     instance_variable_get(key) 
    end 
end 

b = Boy.new("Tom", 23) 
b.name  # Tom 
b[:@name]  # Tom 

それとも

class Boy 
    attr_accessor :name, :age 
    def initialize(n, a) 
    @name = n 
    @age = a 
    end 

    def [](key) 
     public_send(key) 
    end 
end 

b = Boy.new("Tom", 23) 
b.name  # Tom 
b[:name]  # Tom 

そして、あなたは最初のスタイルについて[] =メソッド、

を定義する場合:第二スタイルのために

def []=(key, value) 
    instance_variable_set(key, value) 
end 

def []=(key, value) 
    public_send(key.to_s + '=', value) 
end 
+0

ありがとうございました。これは完全に機能します。このために[] =メソッドを定義することも可能ですか? – Lekeasong

+0

はい、回答を追加しました。 – h2so5

関連する問題