[#16113] Strange idea... exporting from a scope — "Hal E. Fulton" <hal9000@...>

Hello...

33 messages 2001/06/01

[#16364] Re: Garbage Collection? — Michael Davis <mdavis@...>

Windows 2000 and linux (RedHat 6.2). I have run these tests on both OSs.

12 messages 2001/06/09

[#16400] Symbolic Computation III — Mathieu Bouchard <matju@...>

14 messages 2001/06/11

[#16502] Playing with Ruby Syntax (was: Initial thoughts about Ruby From a Smalltalk Programmer) — jweirich@...

Michael> Hi Everyone, I have to say I'm utterly fascinated by Ruby

9 messages 2001/06/15

[#16661] Problem running irb with Ruby 1.6.4 under FreeBSD 4.0 — Bob Alexander <balexander@...>

I've installed Ruby 1.6.4 on a FreeBSD 4.0 machine, and get the

11 messages 2001/06/20

[#16686] opening db files made by apache dbmmanage — Fritz Heinrichmeyer <fritz.heinrichmeyer@...>

14 messages 2001/06/21

[#16801] rb_define_class() vs Class.new() — Kero van Gelder <kero@...4050.upc-d.chello.nl>

Hi,

18 messages 2001/06/23
[#16802] Re: rb_define_class() vs Class.new() — ts <decoux@...> 2001/06/23

>>>>> "K" == Kero van Gelder <kero@d4050.upc-d.chello.nl> writes:

[#16841] RE: national characters is strings — "Aleksei Guzev" <aleksei.guzev@...>

Next week I'll try to rebuild Ruby with Unicode strings. But it would be

15 messages 2001/06/25
[#16842] Re: national characters is strings — matz@... (Yukihiro Matsumoto) 2001/06/25

Hi,

[#16843] Re: national characters is strings — "Aleksei Guzev" <aleksei.guzev@...> 2001/06/25

That's good enough. But I'm afraid this could ( not would ) cause string

[#16868] Something strange with Ruby's inheritance mechanism — Eric Jacoboni <jaco@...>

As Ruby beginner, i try some "canonical" OO scripts. Doing so, I've

14 messages 2001/06/25
[#16873] RE: Something strange with Ruby's inheritance mechanism — "Aleksei Guzev" <aleksei.guzev@...> 2001/06/26

[#16879] Re: Something strange with Ruby's inheritance mechanism — Mathieu Bouchard <matju@...> 2001/06/26

On Tue, 26 Jun 2001, Aleksei Guzev wrote:

[#16869] Something strange with Ruby's inheritance mechanism — Eric Jacoboni <jaco@...>

As Ruby beginner, i try some "canonical" OO scripts. Doing so, I've

12 messages 2001/06/25

[#16881] — "Aleksei Guzev" <aleksei.guzev@...>

32 messages 2001/06/26
[#16916] Re: Method overloading (option) Was: Re: — "Wayne Blair" <wayne.blair@...> 2001/06/26

[#16920] Re: Method overloading (option) Was: Re: — matz@... (Yukihiro Matsumoto) 2001/06/26

Hi,

[#16888] finalizers, destructors and whatnot — "David Leal" <david@...>

Hi all,

16 messages 2001/06/26

[#17037] keeping an Exception object alive — David Alan Black <dblack@...>

Hello --

19 messages 2001/06/28
[#17055] Re: keeping an Exception object alive — matz@... (Yukihiro Matsumoto) 2001/06/29

Hi,

[#17066] RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — David Alan Black <dblack@...> 2001/06/29

Hello --

[#17076] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — matz@... (Yukihiro Matsumoto) 2001/06/29

Hi,

[#17079] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — David Alan Black <dblack@...> 2001/06/29

Hello --

[#17138] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — matz@... (Yukihiro Matsumoto) 2001/07/02

Hi,

[#17141] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — David Alan Black <dblack@...> 2001/07/02

Hello --

[#17142] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — ts <decoux@...> 2001/07/02

>>>>> "D" == David Alan Black <dblack@candle.superlink.net> writes:

[ruby-talk:16178] Re: The Block Problem -A suggestion

From: "Guy N. Hurst" <gnhurst@...>
Date: 2001-06-03 07:51:03 UTC
List: ruby-talk #16178
Jim Freeze wrote:
> ...
> Anyway, seems to me there is only one problem with leaving
> the || operator alone, and that is a user can trip themselves
> up by destroying the value of a variable. 

No worse than doing  "x = 5" when x already exists.
(Although some languages consider any reassignment as bad).

It is simply parallel assignment going on.

> Also, the altering
> of an external variable but not the creation of that variable
> seems kind of confusing.

This is a problem. Even though an assignment is being made, the 
variable disappears. Auto-exporting would fix this.

However, something you did not address are the variables
inside { } which are not in |...|.  Those behave the same
way.  

a = 0; x = 5
3.times{|a| x+=a }
# both a and x are changed.

3.times{|b| z=b }
# neither b nor z are here

I think matz indicated a desire for a flattened scope here 
(that is, auto-exporting), which I can't imagine would break any 
existing code. Maybe it is not done yet because it is hard to do?

The reason auto-export is safe, is that it can't clobber
anything. If you use z after the block in current versions of
ruby, you'd have to initialize it first anyway, since it wouldn't
exist there. As for previously existing vars of the same name,
well, ruby already uses them if they exist, so that is not new.

The only possible conflict I can imagine is if you have a method
named z. But we can use z() to avoid that conflict.


There is a separate issue - using blocks/procs as if they were
methods, with the variables being like arguments that stay local
to the block. The pending change is to use "<...>" for that.

But even "<...>" doesn't address the issue with variables like z.
(Or will it?)

What is supposed to happen to z, then? Which of the following
effects should a block using "<...>" have on z:
1) use z from the outer scope as an initial value for z inside, but 
do not propagate changes outside of the block
2) use z from the outer scope as an initial value for z inside, and 
propagate changes outside of the block (auto-export)
3) treat z as a new variable, and keep it local to the block (like methods do)
4) same as currently in effect: scope depends on whether it already exists

To make the block more like a method, it seems to require (3); but to maintain the
semblance of a closure, it seems (1) is better, which is also like a method which
is evaluated in the caller's binding (btw, it would be nice if we
could access the caller's binding inside a method without it having
to be explicitly passed in).

...
> BTW, I have read several posts asking to see code where
> someone needed to see a value exported. I am still unclear
> on this point. I suppose if you exited early from a block
> that that would create a real need for exporting a value.
> BTW, how do you exit early from a block?
> 

for example:

99.times{|x| z=x**2-3; break if z>99 }


Guy N. Hurst

-- 
HurstLinks Web Development    http://www.hurstlinks.com/
Norfolk, VA  23510            (757)623-9688 FAX 623-0433
PHP/MySQL - Ruby/Perl - HTML/Javascript

In This Thread