8
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] }
我不希望這樣做的增強產生遞歸函數的第二行。相反,我想@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] }
但克隆不上的特效工作。
此外,使用編組和解組的標準紅寶石深度複製破解不適用於Proc。有沒有辦法做到這一點?