0

始める前に、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

何かの値を取得するためにラムダ コード ブロックを取得する方法がわかりません。正しい方向への助けや指摘をいただければ幸いです。

4

3 に答える 3

3

これらの呼び出しを変更できない場合:

value = rule(condition: lambda {@something > 100})
value.act(120)

試してくださいinstance_exec

def rule(condition: nil)
  t = Object.new
  t.class.module_eval do
    attr_accessor :condition       

    def act(something)
      @something = something

      if(instance_exec &condition)
         "SUCCESS"
      else
        "FAILURE"
      end
    end
  end
  t.condition = condition
  t
end

tのコンテキストで条件を呼び出します。

于 2013-12-10T20:06:32.593 に答える