From: Dave Thomas Date: 2000-01-13T11:54:12-06:00 Subject: [ruby-talk:01138] Re: The value of while... 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