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] }
我不希望进行扩充的第二行产生递归函数.相反,我希望@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和unmarshal的标准Ruby深层复制hack也不适用于Procs.有办法做到这一点吗?