Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3441794
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 18, 20262026-05-18T08:35:48+00:00 2026-05-18T08:35:48+00:00

Is there a straightforward way in Ruby to produce a copy of a Proc?

  • 0

Is there a straightforward way in Ruby to produce a copy of a Proc?

I have a Proc called @foo. I want another method to periodically augment @foo with additional logic. For example:

# create initial Proc
@foo = lambda { |x| x }

# augment with more logic
@foo = lambda { |x| x > 1 ? x*x : @foo[x] }

I don’t want the second line that does the augmentation to produce a recursive function. Instead, I want @foo to be bound by value into the lexical scope of the new @foo definition, producing a function that looks more like this:

@foo = lambda { |x| x > 1 ? x*x : lambda{ |x| x }[x] }

I get an infinite recursion and an eventual stack overflow instead, due to the resulting function looking like this:

@foo = lambda { |x| x > 1 ? x*x : lambda { |x| x > 1 ? x*x : { lambda |x| # etc...

I’d like the code to be like this:

# augment with more logic
@foo = lambda { |x| x > 1 ? x*x : (@foo.clone)[x] }

but clone doesn’t work on Procs.

Additionally, the standard Ruby deep copy hack, using marshal and unmarshal, doesn’t work on Procs either. Is there some way to do this?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-18T08:35:49+00:00Added an answer on May 18, 2026 at 8:35 am

    Even if clone would work on Procs, it wouldn’t help you, because you’d still be calling clone on the new value of @foo, not on the previous one like you want.

    What you can do instead is just store the old value of @foo in a local variable that the lambda can close over.

    Example:

    def augment_foo()
      old_foo = @foo
      @foo = lambda { |x| x > 1 ? x*x : old_foo[x] }
    end
    

    This way old_foo will refer to the value that @foo had when augment_foo was called and everything will work as you want.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Is there a straightforward way to make a copy of a VB.NET solution and
Is there a straightforward way in PHP to get an arbitrary complex value into
Is there any (straightforward) way to solve the dynamic registration issue with multitouch scaling
Is there a straightforward way to coach TMail to make the body encoded with
Is there a straightforward way of determining the number of decimal places in a(n)
Is there any straightforward way of finding a key by knowing the value within
Is there a straightforward way of overriding the titleView of the current navigation bar
When writing a new jQuery plugin is there a straightforward way of checking that
Is there any (reasonably) straightforward way to generate comments to explain the structure of
I am sure there must be a relatively straightforward way to do this, but

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.