如何定义用于访问ruby类中的类成员的[]方法?

时间:2012-03-20 11:07:19

标签: ruby-1.9.3

我在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 个答案:

答案 0 :(得分: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