Скажут, у меня есть следующие классы:Определить методы из шаблона во время выполнения в рубине
class Foo
attr_accessor :name, :age
end
class Bar
def initialize(name)
@foo = Foo.new
@foo.name = name
end
end
Я хотел бы определить аксессор на баре, который является простым псевдонимом foo.name. Достаточно легко:
def name
@foo.name
end
def name=(value)
@foo.name = value
end
Имея только одно свойство, это достаточно легко. Однако, скажем, Foo предоставляет несколько свойств, которые я хочу открыть через Bar. Вместо того, чтобы определять каждый метод вручную, я хочу сделать что-то вроде этого, хотя я знаю, что синтаксис не прав:
[:name, :age].each do |method|
def method
@foo.method
end
def method=(value)
@foo.method = value
end
end
Итак ... что такое правильный способ определения методов, как это?
Btw, ваш пример кода на самом деле не работает, потому что 'foo' является локальной переменной и выходит за пределы области действия в конце метода' initialize'. – sepp2k
@ sepp2k: Да, глупо меня –