0

クラスを拡張して 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
4

1 に答える 1