2012-03-20 24 views
0

我已經寫了一個紅寶石類,我想定義方法[]來訪問它的成員(所有成員都是公共的)。例如,對於下面的簡單類:如何定義用於訪問ruby類中的類成員的[]方法?

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 2012-03-20 11:41:47

+0

是的,我添加了一個答案。 – h2so5 2012-03-20 12:20:36