Как определить метод [] для доступа к членам класса в классе ruby? - PullRequest
0 голосов
/ 20 марта 2012

Я написал класс на 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 Ответ

1 голос
/ 20 марта 2012
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
...