On Tue, Aug 01, 2006 at 09:03:50PM +0900, dblack / wobblini.net wrote: > > No; what makes something a closure, as I understand it, is that it > carries the context of its creation with it. Also, there's actually a > difference between a block on the one hand, and a Proc or lambda on > the other. (See my last couple of posts.) That's far too broad to even be a meaningful distinction. It's tantamount to claiming that in a program where everything has lexical scope, everything is a closure -- because everything's "context" (essentially its scope) is always applicable to it as it was at the point of its creation with lexical scope. > > I think of a closure as a kind of suitcase: you pack it in one place, > and unpack it somewhere else. Even if it's empty, though, it's still > a suitcase. That makes more sense than what you said above (that I quoted above and to which I responded above): it sounds like we're back to the koan here. Specifically, it sounds like what you're saying here would indicate that this is a closure: def foo bar = 0 lambda { puts bar += 1 } end baz = foo and this is a closure: def foo lambda { puts "Hellow world!" } end bar = foo because it does the same things with scope, but this is not a closure: foo = 0 foo.each do puts bar += 1 end because its functionally equivalent to accessing global scope (which even GWBASIC can do). Unfortunately, I suspect that you would say that last example actually is a closure, and your "think of a closure" description above was simply not precise enough. I'd accept the description you gave above as being koan-compliant, with the first two being closures within a broad but theoretically applicable definition of a closure, as long as the apparent meaning of your definition-by-analogy that excludes the third example is the definition you're using. Once you interpret it to include the third definition, I have a distinct problem with it. > > Another way to look at it is this: if you decide that the lambda in > your example above is not a closure, then you have to come up with > separate explanations for everything it does that is closure-like. > If you look at it as a closure, however, there's nothing unaccounted > for. . . . and that's why it makes sense to think of it as fitting a koan-compliant definition of a closure as you explained above, so long as what it carries around with it is actually *a lexically closed scope*, even if there's nothing meaningful within that closed scope. That still doesn't make all blocks closures, though. -- CCD CopyWrite Chad Perrin [ http://ccd.apotheon.org ] print substr("Just another Perl hacker", 0, -2);