def do_something
override 'flags', 'ABC'
end
project('XXX') do
configuration('debug') do
do_something
end
end
このサンプルの「オーバーライド」は、instance_evalで呼び出される構成オブジェクトのメソッドです。
コンフィギュレーションブロックのコンテキスト内でメソッド呼び出しを強制的に実行する方法があるため、たとえば「オーバーライド」を解決して実行できますか?
[編集]
だから私は、ルートDSLオブジェクトを作成し、次のように評価します
:root_dsl = DSL.new
root_dsl.instance_eval(File.read(filename))
このDSLクラスは、上記のサンプルから「プロジェクト」をマッチング、それにメソッドを持っています
def project(&block) do
project_dsl = ProjectDSL.new
project_dsl.instance_eval(&block)
end
project_dslクラスには、上記の例の 'configuration'と一致するメソッドがあります。
def configuration(name, &block) do
configuration_dsl = ProjectConfigDSL.new(name)
configuration_dsl.instance_eval(&block)
end
など。ユーザは、DSLファイル自体の定義済みメソッドがProjectConfigDSLオブジェクトのコンテキスト内で実行されることを望んでいます。
DSL実装自体を共有してもよろしいですか? – mudasobwa
@ mudasobwa私は要求どおりに実装の詳細を追加しました – lyptt