[#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:01146] Re: The value of while...

From: Dave Thomas <Dave@...>
Date: 2000-01-15 16:57:30 UTC
List: ruby-talk #1146
matz@netlab.co.jp (Yukihiro Matsumoto) writes:

> |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).
> 
> It's bit weird for me.  Because I feel returning value cannot be the
> value of the `return' expression itself.  See this.
> 
>   print return(22), "\n"

Contrast with:

  def fred
    return 22
  end

print fred(), "\n"

But, says the naive neophyte, where'd the '22' come from. A method
returns the value of the last expression it evaluates. And the value
of 'return' is a void expression...

> |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.
> 
> This too.  `break' can have some value to pass, but it's something but
> the return value of `break'.

class Fixnum
  def prime?
    ,,,
  end
end

# Find the first prime number in 'range', or false if there is none:

first = ( for i in range
            break i if i.prime?
          end
        )

if first
  ..
end

(Possibly a bad example, as 'for' currently returns the range)


To me it it comes down to the fact that if everything is an
expression, then what's the most meaningful value of that expression.

> |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.
> 
> I think it's a too big change.

Agreed!


Please don't think I'm pushing all this - it's just an interesting
discussion, (with some possibly beneficial side effects)

Dave

In This Thread