[#403837] Why none of the block giving the expected output with the "enumerator"? — Arup Rakshit <lists@...>

Why none of the block giving the expected output with the "enumerator"?

9 messages 2013/02/02

[#403870] Confusion with Enum#with_object block argument construct — Arup Rakshit <lists@...>

C:\>irb

9 messages 2013/02/03

[#403920] Character classes use in Ruby — Love U Ruby <lists@...>

Can anyone help me by giving an explanatory example of each of the

13 messages 2013/02/04

[#403935] How to stop page loading using selenium-web driver? — Love U Ruby <lists@...>

How to stop page loading using selenium-web driver?

11 messages 2013/02/04

[#403972] Ruby could recognize the values when putting into a webpage text filed. — Love U Ruby <lists@...>

SGksCgpJIGhhdmUgc29tZSB2YWx1ZXMgaW4gbXkgRXhjZWwgYXMgYmVsb3c6

9 messages 2013/02/05

[#403986] old syntax? what's going on here — tamouse mailing lists <tamouse.lists@...>

I have this in a _spec.rb file: (a gem I inherited at work)

11 messages 2013/02/05

[#404005] Implementing DRY with a function call — Rob Marshall <lists@...>

Hi,

12 messages 2013/02/05

[#404006] using an instance variable inside a method — FirstName Surname <lists@...>

Hello.

19 messages 2013/02/05

[#404021] Not able get the label text incurred with <input> element — Love U Ruby <lists@...>

I do have a below `HTML`:

18 messages 2013/02/05

[#404025] Symbol.defined? — Student Jr <lists@...>

Symbol deserialization from external sources is now known to be

15 messages 2013/02/06

[#404058] Ruby 1.9.3-p362 on Mac OSX — Peter Bailey <lists@...>

Hi,

13 messages 2013/02/06

[#404082] Problem building Ruby 1.9.3 patchlevel 385 under AIX 7.1 — Ruby Student <ruby.student@...>

Hello World!

10 messages 2013/02/06

[#404101] Issues from an extreme beginner — Bruce Palmer <lists@...>

Hey guys, great to be part of such a great community! I look forward to

19 messages 2013/02/07
[#404104] Re: Issues from an extreme beginner — Bruce Palmer <lists@...> 2013/02/07

Ahh, thank you Matthew! That was just the push I needed!

[#404208] elegant way to determine if something is defined — tamouse mailing lists <tamouse.lists@...>

Something like:

15 messages 2013/02/10

[#404218] Ruby Equivalent to VB's "With"? — Joel Pearson <lists@...>

I've looked around but I couldn't find anything helpful on this,

11 messages 2013/02/10

[#404235] The "ruby way" to do desktop applications? — "guirec c." <lists@...>

Hello,

17 messages 2013/02/11

[#404238] Best books for "advanced" programmers — "guirec c." <lists@...>

Hello,

18 messages 2013/02/11

[#404245] Issue with Excel column values read. — Love U Ruby <lists@...>

Hi,

22 messages 2013/02/11

[#404344] Ruby command line options s and S — Love U Ruby <lists@...>

Can anyone help me to understand the difference between s and S with

15 messages 2013/02/13

[#404386] Re: Ruby command line options s and S — "D. Deryl Downey" <me@...>

Dude!

20 messages 2013/02/14

[#404387] Ruby Multithreaded producer-consumer problem — Abhijit Sarkar <lists@...>

Hi,

26 messages 2013/02/14
[#404896] Re: Ruby Multithreaded producer-consumer problem — Abhijit Sarkar <lists@...> 2013/02/24

Bump!

[#404456] skip iteration in each loop — Saurav Chakraborty <lists@...>

I want to skip iteration for few values depending on dynamic condition.

11 messages 2013/02/15

[#404491] so, what's the proper way to replace funcionality of GOTO ? — "Stu P. D'naim" <lists@...>

I need to make few scripts for tasks I do often manually, but last time

27 messages 2013/02/15
[#404492] Re: [from BASIC to Ruby] so, what's the proper way to replace funcionality of GOTO ? — Love U Ruby <lists@...> 2013/02/15

Stu P. D'naim wrote in post #1097111:

[#404494] Re: [from BASIC to Ruby] so, what's the proper way to replace funcionality of GOTO ? — Ryan Victory <ryan@...> 2013/02/15

Love U Ruby: I'm really not sure what you meant by that response, but

[#404570] What is Ruby's default constructor? — Love U Ruby <lists@...>

Hi,

12 messages 2013/02/17

[#404632] Re: splat operator and Ruby instance variable assignments — Marc Heiler <lists@...>

Ok, understood what the guy wants ...

17 messages 2013/02/19
[#404640] Re: splat operator and Ruby instance variable assignments — Love U Ruby <lists@...> 2013/02/19

Marc Heiler wrote in post #1097736:

[#404645] Re: splat operator and Ruby instance variable assignments — Ryan Davis <ryand-ruby@...> 2013/02/19

[#404646] Re: splat operator and Ruby instance variable assignments — Love U Ruby <lists@...> 2013/02/19

Ryan Davis wrote in post #1097840:

[#404647] Re: splat operator and Ruby instance variable assignments — Peter Hickman <peterhickman386@...> 2013/02/19

On 19 February 2013 20:35, Love U Ruby <lists@ruby-forum.com> wrote:

[#404648] Re: splat operator and Ruby instance variable assignments — Love U Ruby <lists@...> 2013/02/19

Peter Hickman wrote in post #1097848:

[#404696] THE CLASS/OBJECT CHICKEN-AND-EGG PARADOX — "Xavier R." <lists@...>

Hi,

25 messages 2013/02/20
[#404699] Re: THE CLASS/OBJECT CHICKEN-AND-EGG PARADOX — Matt Mongeau <halogenandtoast@...> 2013/02/20

Maybe you could provide more detail about what you are confused about. To

[#404700] Re: THE CLASS/OBJECT CHICKEN-AND-EGG PARADOX — "Xavier R." <lists@...> 2013/02/20

Matt Mongeau wrote in post #1098058:

[#404705] Re: THE CLASS/OBJECT CHICKEN-AND-EGG PARADOX — Matt Mongeau <halogenandtoast@...> 2013/02/20

It's not really a paradox. Take for example

[#404738] backslash substitution — Mario Ruiz <lists@...>

don't know why... but this is not working

18 messages 2013/02/21

[#404809] Difference of 2 dates interms of years. — "Xavier R." <lists@...>

how can we get the experience years between two dates(ex:2012-01-11 to

13 messages 2013/02/22

[#404817] Not able to understand the difference between "||=" and "|=". — "Xavier R." <lists@...>

>> a = []

12 messages 2013/02/22

[#404839] range is not assigning to the splat variable. — Love U Ruby <lists@...>

Why splat variable couldn't take in the below two code the "range" ->

10 messages 2013/02/23

[#404842] Why class returning its own name when "include" statement? — Love U Ruby <lists@...>

I was actually playing around with the class definition return values.

16 messages 2013/02/23
[#404844] Re: Why class returning its own name when "include" statement? — Love U Ruby <lists@...> 2013/02/23

@Stefano Yes you are right. The below code is proved that.

[#404867] how to see the class creation time in Ruby? — Love U Ruby <lists@...>

In Ruby any chance to see the last-modified time of a specific class?

15 messages 2013/02/23

[#404901] Confusion with `nil` value being produced by IRB in case of Array#size manipulation. — Love U Ruby <lists@...>

enum[int] =3D obj =E2=86=92 obj

10 messages 2013/02/24

[#404921] How should I print only the last combination when using Array#combination(n) ? — Love U Ruby <lists@...>

>> a = [1,2,3]

15 messages 2013/02/24

[#405026] Please, help (GCD) greatest common divisor. — Caddy Tonks Lupin <lists@...>

Write a program to read two integers and show their greatest common

17 messages 2013/02/26

[#405059] Does this specific sound library exist? — Dirk Vogel <lists@...>

Hi there,

16 messages 2013/02/26

[#405067] Mac OS 10.8.2 and openssl — "Dr. Hegewald" <hegewald@...>

Hi everybody,

24 messages 2013/02/27

[#405079] Why `10` not returned without the `return` from the block ? — Love U Ruby <lists@...>

CODE - I

10 messages 2013/02/27

[#405107] Object track llist for a particular class. — "Xavier R." <lists@...>

Say I have created more than one instances from a particular class as

13 messages 2013/02/27

[#405145] Discussion on Ruby's `alias` — Tukai Patra <lists@...>

>> class Foo

27 messages 2013/02/28

[#405175] telnet - how to loop through commands listed in a file — Bob Ford <lists@...>

Let me first explain what I'm trying to do. I have written a very

18 messages 2013/02/28

Re: Fun with finalizers

From: Garthy D <garthy_lmkltybr@...>
Date: 2013-02-17 03:11:26 UTC
List: ruby-talk #404563
Hi Robert,

Thankyou very much, yet again. An excellent and incredibly informative 
response, as always.

The hole in my understanding (and what I had begun to suspect was the 
case, and I think you have identified) was pretty-much here:

 > The closure captures the current scope, i.e. all local variables.

Before I had encountered the problem, my understanding was that the 
closure would capture any referenced variables similarly to a 
function/method call. I wasn't 100% sure of the mechanics, but I 
believed that it "just happened". What I didn't understand was that it 
did this by holding on to the entire scope- and just that one scope. The 
distinction had not become apparent to me as my understanding did not 
clash with what was actually happening when finalizers were not 
involved. However, the differences that arise once finalizers enter the 
picture are actually very significant.

I think I did not pick this up early as a consequence of this means that 
most of the discussion online regarding Ruby finalizers either glosses 
over this point- or flat out misses it. There are plenty of mentions of 
not implicitly including the object being finalized in the finalizer 
(by, say, expecting to be able to call a method on the finalized 
object), but I'm not sure I've seen a mention of capturing the current 
scope and needing to be careful with the visible variables in it. 
However, a common solution seems to be to use a method to return the 
finaliser proc itself, and I'd missed the distinction that by doing it 
this way, the call is created with a different scope than that which 
actually sets the finalizer itself. Thus the finalizer never even sees 
the value being finalized, avoiding the problem nicely.

The first example you have given makes it completely clear what is 
happening. Based on my previous understanding, I would be unsure of what 
the output from "g.call" would be. My first two guesses would probably 
have been an exception, or possibly one or zero, but at that point I'd 
be questioning if my understanding was actually correct. Knowing what I 
know now, the answer is obvious, even trivial. Note that if the example 
didn't use an integer, but an object, it would have fit in with my 
previous understanding. Only by being an immediate value did the flaw in 
my previous understanding become apparent.

Thankyou for taking the time to put together yet another superb post for 
the list. I am frequently in awe at the level of detailed knowledge you 
have in some of the more complex mechanics in Ruby. I hope that people 
encountering similar issues can also stumble across it, so that the post 
ends up helping considerably more people than just myself.

Cheers,
Garth

On 17/02/13 01:00, Robert Klemme wrote:
 > On Sat, Feb 16, 2013 at 12:08 PM, Garthy D
 > <garthy_lmkltybr@entropicsoftware.com>  wrote:
 >
 >> Excellent thinking. I also thought it might be something along those 
lines
 >> too.
 >
 > To make it crystal clear: the reason is that there is a closure
 > involved. The closure will hold on to the object referenced by a on
 > method entry - unless, as you discovered, that reference is cleared.
 >
 > Just in case and if you don't know, here's what a closure does:
 >
 > irb(main):015:0>  def f; x=0; lambda { x+=1 } end
 > =>  nil
 > irb(main):016:0>  g = f
 > =>  #<Proc:0x802b7778@(irb):15 (lambda)>
 > irb(main):017:0>  g.call
 > =>  1
 > irb(main):018:0>  g.call
 > =>  2
 > irb(main):019:0>  g.call
 > =>  3
 >
 > The closure captures the current scope, i.e. all local variables.
 > This includes method arguments and "self" - and hence all member
 > variables of self as well:
 >
 > irb(main):023:0>  def f; @x = 0; lambda { @x += 1 } end
 > =>  nil
 > irb(main):024:0>  g = f
 > =>  #<Proc:0x8029f934@(irb):23 (lambda)>
 > irb(main):025:0>  g.call
 > =>  1
 > irb(main):026:0>  g.call
 > =>  2
 > irb(main):027:0>  g.call
 > =>  3
 > irb(main):028:0>  g.call
 > =>  4
 >
 >
 >> I tried various combinations as well: proc, Proc.new, I think a return
 >> from method(), calls to a separate object; but there was no impact 
on the
 >> result. If "a" isn't cleared, the object is held.
 >
 > I would be surprised if there was.  lambda and Proc both create a
 > closure.  Difference between lambda and Proc are in a different area:
 > 
http://stackoverflow.com/questions/1740046/whats-the-difference-between-a-proc-and-a-lambda-in-ruby
 >
 >> I'm guessing that there
 >> might be some way to say to not touch a thing in the current scope, 
but I'm
 >> not sure *how* to specify it.
 >
 > There is no way to exclude that variable from the closure - other than
 > not passing it. But that would be pointless here. :-)
 >
 >> I also adapted the main program based on my experience with the code 
below,
 >> and suddenly the finalizers were called. So it's the same type of 
problem.
 >>
 >> So there's a problem, and it's avoidable. I know the "what", but 
don't know
 >> the "why". There is some subtlety I'm missing. Most interesting. :)
 >
 > Now you should know.
 >
 > Kind regards
 >
 > robert
 >
 >


In This Thread

Prev Next