[#4766] Wiki — "Glen Stampoultzis" <trinexus@...>

21 messages 2000/09/04
[#4768] RE: Wiki — "NAKAMURA, Hiroshi" <nahi@...> 2000/09/04

Hi, Glen,

[#4783] Re: Wiki — Masatoshi SEKI <m_seki@...> 2000/09/04

[#4785] Re: Wiki — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/09/05

Howdy,

[#4883] Re-binding a block — Dave Thomas <Dave@...>

16 messages 2000/09/12

[#4930] Perl 6 rumblings -- RFC 225 (v1) Data: Superpositions — Conrad Schneiker <schneik@...>

Hi,

11 messages 2000/09/15

[#4936] Ruby Book Eng. translation editor's questions — Jon Babcock <jon@...>

20 messages 2000/09/16

[#5045] Proposal: Add constants to Math — Robert Feldt <feldt@...>

15 messages 2000/09/21

[#5077] Crazy idea? infix method calls — hal9000@...

This is a generalization of the "in" operator idea which I

17 messages 2000/09/22

[#5157] Compile Problem with 1.6.1 — Scott Billings <aerogems@...>

When I try to compile Ruby 1.6.1, I get the following error:

15 messages 2000/09/27

[ruby-talk:4841] Re: closures

From: Clemens Hintze <c.hintze@...>
Date: 2000-09-11 10:35:18 UTC
List: ruby-talk #4841
>>>>> "Steve" == Steve Merrick <Steve.Merrick@Marconi.com> writes:

    Steve> "Stuart Zakon" <zakons@objectsbydesign.com> wrote in
    Steve> message news:8p2raa$fbq$1@nnrp1.deja.com...
    >> Can somebody please explain what a closure is within the
    >> context of Ruby? (Simple explanation, simple example).

    Steve> I too would be grateful for such an explanation. "Closure"
    Steve> has become trendy in recent years, but I'm humble enough
    Steve> (not really! ;-) to admit I haven't a clue what it is. ;-}

Hmmm ... it something everybody knows but difficult to explain ;-) Let
me try:

I would explain a closure as a piece of code that happens to remember
the whole context it was created in! In opposition to functions/
methods (which establish a context or work in a context established by 
others), a closure works only in its birth context.

In a class a method works in a context created by the constructor. A
subroutine works in a context created by itself. 

In Ruby a context is a part of code surrounded via '{' ... '}' or 'do' 
... 'end'. Look at this:


  age = 12
  clos = proc { age += 1; puts "Inner age is #{age}" }
  clos.call
  puts "Outer age is #{age}"
  age = 36
  clos.call
  puts "Outer age is #{age}"
   
will gives us:

  Inner age is 13
  Outer age is 13
  Inner age is 37
  Outer age is 37

Here the closure is surrounded via '{' ... '}'. We use 'proc' to
make the closure an object we can deal with (e.g. assign it to
variable 'clos'). The variable 'age' is now tied together with the
closure. Changing it anywhere in the closure OR the surrounding
environment will be recognized at both places!

    Steve> -- Steve

HTH,
\cle

In This Thread

Prev Next