[#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:4793] Re: closures

From: Dave Thomas <Dave@...>
Date: 2000-09-05 15:29:21 UTC
List: ruby-talk #4793
Stuart Zakon <zakons@objectsbydesign.com> writes:

> Can somebody please explain what a closure is within the context of
> Ruby? (Simple explanation, simple example).

A closure is simply a chunk of code that "remembers" the context that
it originally appeared in. This is unusual, because in conventional
block-structured languages, once something goes out of scope it is
lost.

I Ruby, we can implement closures using blocks, and convert them into
objects (of class Proc) using the 'proc' method (there are also some
other ways).

So, here's an example:

    def times(n)
      proc { |val| n * val }
    end

Here's a method that takes one argument, n. It returns a closure; a
proc object that also takes an argument. The closure multiplies it's
argument by 'n'.

We can use this like this:

    t12 = times(12)
    t12.call(4)    #=> 48
    t12.call(6)  #=> 72

    t5 = times(5)
    t5.call(4)     #=> 20
    t5.call(6)     #=> 30


The key here is that the original parameter to times, n, is long gone
by the time the closure is called, but it is still available within
the closure.


Regards


Dave

In This Thread