If I'm assimilating this correctly then if something is not equating
to false then it automatically equates to true. Which makes sense.
However, sadly I must say setting up the loop is still a problem for
me to grasp.  (Maybe I should consider another hobby :))

Here it's new incarnation I'm still failing to catch the error and
repeat the question.

def ask question
  reply = false
  while not reply
  puts question
  reply = gets.chomp.downcase

  case reply
       when 'yes': reply = true
       when 'no' : reply = false
       else puts 'please answer "yes" or "no"'
    end
  end
end

Note - When I attempted to use this:

mexicanfood.rb:10: parse error, unexpected ':', expecting kEND
       when 'no'  :return = false

I'm seriously wondering if this obstacle to my understaning is an
indicator of my innate skills or if spending more time will help to
enlighten and break through.

Stuart

> while true
>    puts question
>    case gets.chomp.downcase
>    when 'yes' : return true
>    when 'no'  : return false
>    else puts 'please answer "yes" or "no"'
>    end
> end

ruby was spitting out an error:


On 6/25/06, Matthew Smillie <M.B.Smillie / sms.ed.ac.uk> wrote:
> On Jun 25, 2006, at 14:45, Rob Biedenharn wrote:
>
> > On Jun 25, 2006, at 9:32 AM, Dark Ambient wrote:
> >
> >> while (not reply)
> >>   if (reply !='yes' || reply != 'no' )
> >>     puts ' Please answer "yes" or "no".'
> >>   elsif reply == 'yes'
> >>     reply = true
> >>   else reply == 'no'
> >>     reply = false
> >>   end
> >> end
> >
> > Try:
> >       if (reply != 'yes' && reply != 'no')
> >
> > OR:
> >
> >       case reply
> >       when 'yes': reply = true
> >       when 'no' : reply = false
> >       else puts 'please answer "yes" or "no"'
> >       end
> >
> > In your original, reply is going to be != to at least one of the
> > two alternatives!
>
> There's trouble with your loop condition as well: you'd want to
> terminate the loop when reply == false, but when reply == false, the
> loop won't terminate, since !reply == true.  Similarly, when you get
> a bad answer, reply == "foo" (or something), so !reply == false, and
> the loop will terminate.
>
> In this case, I'd use a case statement like R.B. suggested, but with
> an explicit return to break the loop:
>
> while true
>    puts question
>    case gets.chomp.downcase
>    when 'yes' : return true
>    when 'no'  : return false
>    else puts 'please answer "yes" or "no"'
>    end
> end
>
> Or, if you don't like explicit returns, maybe something like this:
> while (not reply)
>    puts question
>    reply = gets.chomp.downcase
>    if (reply != 'yes' && reply != 'no')
>      puts 'please answer "yes" or "no"'
>      redo  # restarts the loop without checking the condition
>    end
> end
> # convert yes/no to true/false here so that it doesn't
> # interfere with the loop.
> reply == 'yes' ? true : false
>
>
>
> matthew smillie.
>
>