RubyでProcのコピーを作成する簡単な方法はありますか?RubyでProcをディープコピーするにはどうすればよいですか?
私は@foo
というProcを持っています。追加のロジックで@fooを定期的に増やす別の方法が必要です。たとえば:
# create initial Proc
@foo = lambda { |x| x }
# augment with more logic
@foo = lambda { |x| x > 1 ? x*x : @foo[x] }
私はは、再帰関数を生成するために増強しない第2のラインを望んでいない。代わりに、私はもっとこのようになります機能を生産、@fooが新しい@foo定義のレキシカルスコープに値に拘束されることにしたい。
@foo = lambda { |x| x > 1 ? x*x : lambda{ |x| x }[x] }
私が代わりに無限再帰と最終的なスタックオーバーフローを取得し、原因このように見える結果の関数に:
@foo = lambda { |x| x > 1 ? x*x : lambda { |x| x > 1 ? x*x : { lambda |x| # etc...
私はこのようにするコードたい:
# augment with more logic
@foo = lambda { |x| x > 1 ? x*x : (@foo.clone)[x] }
をしかし、クローンは手続きオブジェクトでは動作しません。
また、マーシャリングとアンマーシャルを使用する標準のRubyディープコピーハックは、Procsでも動作しません。これを行うにはいくつかの方法がありますか?