我想通过扩展一个类(如在Homebrew中)在 Ruby 中创建一个对象:
class Somepackage < Formula
version "2.8"
homepage "http://foo.bar.com/"
end
但是,我是一名 Ruby 新兵,我找不到一种方法来定义Formula
适合我需要的类:
class Formula
attr_reader :version, :homepage
def self.version (version)
@version = version
end
end
这显然不起作用:
Somepackage.version #=> nil
(我需要它返回2.8
)
我知道这一定是一件非常简单的事情,但我尝试了各种组合,但就是做不到。
更新
好的,因此,感谢 Sergio 的回答,最终版本如下所示:
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