"Goto line" function?


#1

Ok, I’ve read through the forum but I haven’t got my answer. If a value
in my program is true, I want my program to go back to a line like this:

(Example of the program)

  1. puts ’ ’
  2. puts ’ ’
  3. puts ‘****************************’
  4. puts ‘** (Rules of the program) **’
  5. puts ‘****************************’
  6. puts ’ ’
  7. puts ‘Ohh, hello there! What are you named many names?’
  8. names = gets.chomp
  9. if names == ‘2’
  10. puts ’ ’
  11. puts ‘Are you named two names?’
  12. puts ’ ’
  13. answer = gets.chomp
  14. if answer == ‘yes’
  15. (the program continues)
    
  16. BUT if answer == ‘no’
  17.   goto.line.7 (And skip the rules, just restart it and begin
    

from line 7.)

What is the command? I know it’s not “goto.line.X” but what is it? “back
to line.X”? “goto.lineX”? What is the command?


#2

You don’t want to do this. This is an old bad practice from BASIC days
that is thankfully almost forgotten.

You want a while loop around lines 7-20.

In other cases there are other workarounds around goto.

If you must goto, there is a hack with call//cc. I needed it once, you
probably won’t. Ever.

Aur

Check RubyMentor at http://rubymentor.rubyforge.org/


#3

Helgitomas G. wrote:

  1. puts ’ ’
  2. (the program continues)
    
  3. BUT if answer == ‘no’
  4.   goto.line.7 (And skip the rules, just restart it and begin
    

from line 7.)

What is the command? I know it’s not “goto.line.X” but what is it? “back
to line.X”? “goto.lineX”? What is the command?

Addressing just the loop/goto issue, how about summat like:

#!/usr/bin/env ruby
done=false
until done
puts ’ ’
puts ’ ’
puts ‘
puts ‘** (Rules of the program) **’
puts '

puts ’ ’
puts ‘Ohh, hello there! What are you named many names?’
names = gets.chomp
if names == ‘2’
puts ’ ’
puts ‘Are you named two names?’
puts ’ ’
answer = gets.chomp
done = true if answer == ‘yes’
end
end
#This is where “the program continues”
puts ‘the end’

This gives me the output:

lnx:scratch : blah.rb


** (Rules of the program) **


Ohh, hello there! What are you named many names?
2

Are you named two names?

no


** (Rules of the program) **


Ohh, hello there! What are you named many names?
2

Are you named two names?

yes
the end

cheers,

paulv


#4

don’t blame him, I’m still learning TASM and GOTO’s just like JMP


#5

On Sat, Mar 10, 2007 at 07:06:25AM +0900, SonOfLilit wrote:

If you must goto, there is a hack with call//cc. I needed it once, you
probably won’t. Ever.

Less mind-bending is catch/throw, or ‘redo’ within a block.

If you really want to write BASIC programs in Ruby, this was discussed
several years ago in ruby-talk - search the archives :slight_smile: