Need help regarding conditionals on while loops

In a tutorial I'm currently reading
(http://pine.fm/LearnToProgram/?Chapter=10\), this came up.

def doUntilFalse firstInput, someProc
  input = firstInput
  output = firstInput

  while output
    input = output
    output = someProc.call input
  end

  input
end

They never really explained how this works though:

while output

What exactly is Ruby checking for here? The author uses this code for
the method:

puts doUntilFalse([5], buildArrayOfSquares).inspect

So the method would be something like this: "while [5]"

I'm extremely confused about this :), as far as I can see, it's like
asking 'What's the difference between an elephant.' If someone could
just simply explain this it would be awesome! Thanks in advance!

···

--
Posted via http://www.ruby-forum.com/\.

They never really explained how this works though:

while output

The while loop body is executed if the expression evaluates to a true-ish value.
In this case the expression is simply the local variable 'output'.

In Ruby all values are considered true *except* for nil and false. In particular
0 is considered true as is an empty string, empty array, and empty hash ("", , {}).
This often trips up Ruby newcomers.

So in your example

def doUntilFalse firstInput, someProc
input = firstInput
output = firstInput

while output
   input = output
   output = someProc.call input
end

input
end

the while loop will continue iterating until someProc returns a false-ish value
(either nil or false). The output of someProc is reused as its input for the
next iteration.

Gary Wright

···

On Sep 13, 2011, at 10:49 PM, Kane Williams wrote:

Thanks that was very helpful!

···

--
Posted via http://www.ruby-forum.com/.