Я хотел бы создать объект в Ruby, расширяя класс (например, в Homebrew):доморощенного в Руби
class Somepackage < Formula
version "2.8"
homepage "http://foo.bar.com/"
end
Однако я Руби вербовать и я могу» т найти способ, чтобы определить Formula
класс, который будет соответствовать моим потребностям:
class Formula
attr_reader :version, :homepage
def self.version (version)
@version = version
end
end
это, очевидно, не работает:
Somepackage.version #=> nil
(мне нужно это вернуть 2.8
)
Я знаю, что это должно быть очень просто, но я пробовал различные комбинации и просто не могу этого сделать.
Update
Итак, благодаря ответу Серджио, окончательный вариант выглядит следующим образом:
def property(*properties)
properties.each do |prop|
self.class_eval("def self.#{prop}(#{prop} = nil); @#{prop} = #{prop} if #{prop}; @#{prop}; end")
end
end
class Formula
property :version, :homepage
end
class Somepackage < Formula
version "2.8"
homepage "http://foo.bar.com/"
end
После вашего совета, я написал метод метод-генератор и отправил свой источник в моем обновлении вопроса. Спасибо! :) –