From: Logan Capaldo Date: 2006-08-01T13:21:01+09:00 Subject: Re: I thought this was the one that worked? On Aug 1, 2006, at 12:06 AM, Chad Perrin wrote: > On Tue, Aug 01, 2006 at 12:47:50PM +0900, Logan Capaldo wrote: >> On Jul 31, 2006, at 11:26 PM, Chad Perrin wrote: >> >>> Closure >>> A "closure" is an expression (typically a function) that can >>> have >>> free variables together with an environment that binds those >>> variables (that "closes" the expression). >>> >> >> In ruby this environment always exists for a block regardless of the >> presence of free variables, since the declaration of the variables >> that are free in the block can be added after (in time) the creation >> of the closure. > > I think that depends on what you mean by "creation of the closure" in > this case. Are you talking about the code used to create it, or the > assignment of the return value of the closure's enclosing scope to a > variable? > I'm talking about what happens inside the ruby interpreter when it sees that code. As far as ruby is concerned, it doesn't know how to make a block that isn't a "closure". The same code path gets followed whether ruby sees def foo a = 1 lambda { ... a ... } end or def foo lambda { ... } end All the "closure bookkeeping" is done whenever you create a block. No extra bookkeeping is done whether or not you take advantage of the fact that you have a "closure". > -- > CCD CopyWrite Chad Perrin [ http://ccd.apotheon.org ] > "A script is what you give the actors. A program > is what you give the audience." - Larry Wall >