Ruby: マクロからマクロを呼び出すにはどうすればよいですか?
概要
他の 2 つのマクロ呼び出しを呼び出すマクロが必要です。例えば。、
前に:
class Apple < ValidatedObject::Base
attr_accessor :diameter
validates :diameter, type: Float
end
後:
class Apple < ValidatedObject::Base
validates_attr :diameter, type: Float
end
私の質問は実際のところ、#validates_attr を実装する方法です。#validates_attr には 2 つの別々のマクロ呼び出しを行う以外の仕事はありません。
マクロについて読んだり、define_method などを調べたりしています。しかし、他の 2 つの既存のマクロに委任するだけの場合、本当にそのための新しいマクロを作成する必要がありますか?クラスメソッドを書いてみましたが、うまくいきませんでした。
解決策
次のように、Validated Object::Base クラスでメソッドを定義できます。
class ValidatedObject::Base
def self.validates_attr(name, type:)
attr_accessor name
validates name, type: type
end
#...
end
そして、次のように Apple サブクラスからそのメソッドを呼び出します。
class Apple < ValidatedObject::Base
validates_attr :diameter, type: Float
end