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

请问有什么帮助吗?提前致谢

4

1 回答 1

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
于 2012-03-20T11:25:04.080 回答