[#1026] Is this a bug? — Dave Thomas <Dave@...>

18 messages 2000/01/03

[#1084] Infinite loop — Dave Thomas <Dave@...>

17 messages 2000/01/11

[#1104] The value of while... — Dave Thomas <Dave@...>

24 messages 2000/01/11

[ruby-talk:01138] Re: The value of while...

From: Dave Thomas <Dave@...>
Date: 2000-01-13 17:54:12 UTC
List: ruby-talk #1138
matz@netlab.co.jp (Yukihiro Matsumoto) writes:

>   return break next redo retry while until class module def
> 
> Among them, expressions to switch control flow (return, break, next,
> redo, retry) cannot have value anyway.

I'd suggest that return's value is the value you're returning, and that 
break should be altered to accept an argument, which becomes its value 
(see below).

Ah ha! Do this, and we actually simplify things. Right now, a method
is defined to return either the value of the last expression executed
_or_ the value given to 'return'. Change 'return' so that its value is
its argument, and the value of a method becomes simply 'the value of
the last statement executed'.


> I can't think of proper value for `while' and `until', unless `break
> with value' is introduced.  pending.

The value of 'while' and 'until' could be the value of the last
expression executed (just like with methods). If 'break' returns a
value, then that's returned.

> `def' is more difficult, because of implementation reason, we cannot
> have so-called unbound method object in Ruby.  A Method object is a
> method bound to the certain receiver.  It had been discussed in
> Japanese speaking list, but we couldn't find any good idea.

For class methods/singletons I _think_ you can return a meaningful
Method object.

I'm not sure I see any real reason to do this, but for normal instance
methods there an analogy with a block and a Proc object. 'def'
could return an unbound method, which you have to provide a binding to
before evaluating. That binding would then produce a Method, in the
same wy that binding a bock produces a Proc. However, that would mean
a new method in Object and a new internal type, and I'm not sure that
its worth it.


Regards


Dave


In This Thread