読み込んでクラスに変換しようとしている名前と値のリストがあるので、Class.new
.
私が望む最終結果は、次のように定義されているかのように機能する多くのクラスです。
module MyMod
class AA < Base
def self.value
value1
end
end
class AB < Base
def self.value
value2
end
end
...
end
私の現在のコードは次のようになります。
name = 'AA'
value = 'test'
MyMod.const_set name, Class.new(Base) do
???
end
名前の設定はうまく機能しますが、ブロックに入るために必要なものがわかりませんvalue
。呼び出しは機能しません。def
クロージャーvalue
が失われるためです。
私は物事をうまく動かすことができました:
temp = const_set name, Class.new(Base)
temp.define_singleton_method(:value) { value }
ただし、のブロックでそれを行う方法があるはずですClass.new
。define_singleton_method
また、実際にメソッドを正しい場所に配置しているかどうかはわかりません。私のテストでは機能しますが、メソッドが実際にあると思う場所にあるのか、呼び出しチェーンのどこかにあるのかはわかりません。class_variable_set
、attr_reader
、class_eval
、 、およびその他のさまざまな組み合わせを試しましたがinstance_eval
、推測と確認に過ぎませんでした。私はまだメタプログラミングについて頭を悩ませていないと思います:-/