始める前に、instance_eval メソッドと singleton メソッドをいじってみましたが、役に立ちませんでした。この問題に対する私の「最善の」試みを紹介します。
私は次のことをしようとしています:
value = rule(condition: lambda {@something > 100})
value.act(120)
上記の呼び出しは変更できません。
変更できるのは、ルールの定義方法です。
def rule(condition: nil)
t = Object.new
t.class.module_eval{
attr_accessor :condition
def act(something)
if(condition.call(something))
return "SUCCESS"
end
end
}
t.condition = condition
return t
end
何かの値を取得するためにラムダ コード ブロックを取得する方法がわかりません。正しい方向への助けや指摘をいただければ幸いです。