在Ruby中,有没有一种直接的方法来生成过程的副本?
我有一个程序叫
@foo
. 我想要另一个方法用附加的逻辑周期性地扩充@foo。例如:
# create initial Proc
@foo = lambda { |x| x }
# augment with more logic
@foo = lambda { |x| x > 1 ? x*x : @foo[x] }
我
不要
希望执行扩充的第二行生成递归函数。相反,我希望@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] }
但是克隆不适用于procs。
另外,使用marshal和unmashal的标准RubyDeepcopyHack也不适用于proc。有什么办法吗?