クラスを拡張して Ruby でオブジェクトを作成したい ( Homebrewのように):
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
)
とても簡単なことだと思いますが、さまざまな組み合わせを試してみましたが、うまくいきません。
アップデート
わかりましたので、セルジオの回答のおかげで、最終バージョンは次のようになります。
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