More or less:
def make_closure
perm_variable = 0
return proc {
perm_variable += 1
puts "I have been called ", perm_variable, " times."
}
end
def use_closure
fun = make_closure
fun.call
fun.call
fun.call
end
use_closure
Should print out
I have been called 1 times.
I have been called 2 times.
I have been called 3 times.
However, each time you call make_closure, it returns a separate context, so:
def use_closure2
fun1 = make_closure
fun2 = make_closure
fun1.call
fun2.call
fun1.call
end
use_closure2
Should print:
I have been called 1 times.
I have been called 1 times.
I have been called 2 times.
Because fun1 and fun2 store two separate states of perm_variable.
At least that's my understanding of closures.
As far as I know, there's nothing quite like C's static
in Ruby, since there's no way to make a variable local
in scope to a function, but persistant in state over all
calls to that function (at least that I know of).
- Dan
----- Original Message -----
From: KONTRA Gergely <kgergely / mlabdial.hit.bme.hu>
Date: Thursday, August 7, 2003 9:59 am
Subject: Re: C's static equivalent
> On 0807, ts wrote:
> > >>>>> "K" == KONTRA Gergely <kgergely / mlabdial.hit.bme.hu> writes:
> >
> > K> Is there something similar to C's static keyword?
> > K> I want a single function, which has to access and modify a
> permanent> K> variable. Any solution without bundling the function
> to a class?
> > Use a closure
> Could you be more verbose? Eg. how to print out how many times a
> function was called.
>
> Gergo
> --
> +-[ Kontra, Gergely<kgergely / mcl.hu> PhD student Room IB113 ]------
> ---+
> | http://www.mcl.hu/~kgergely "Olyan langesz vagyok,
> hogy |
> | Mobil:(+36 20) 356 9656 ICQ: 175564914 poroltoval kellene
> jarnom" |
> +-- Magyar php mirror es magyar php dokumentacio:
> http://hu.php.net --+
>
>