[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

goto function?

fabsy

8/15/2006 7:28:00 PM

Hey!
I have been trying to find a goto function in ruby..
Like this:

foo: bar
If blabla then GOTO foo

Is there any command for exiting the app?
And how do I search ex a textfile for a certain word and delete it?


------

if value == "2"
system('clear')
print "[Opening file..]\n\n"
r_file = File.open( "file", "a") #Wrote this so I wouldn't get an
error like "File doesn't exist".
r_file = File.open( "file", "r")
print "-----\n"
print r_file.read
print "-----"
print "\n"
system ('ruby note.rb') #is there anyway to restart or goto the
beginning of the script?
end

-----

Thanks!

24 Answers

darren kirby

8/15/2006 8:30:00 PM

0

quoth the fabsy:
> Hey!
> I have been trying to find a goto function in ruby..
> Like this:
>
> foo: bar
> If blabla then GOTO foo

Use a function:

def foo
#whatever foo does

foo() if blabla

or invert the test:

foo() unless !blabla

> Is there any command for exiting the app?

Yeah: 'exit'

> And how do I search ex a textfile for a certain word and delete it?

Probably lots of ways. One would be to read the file to a string and use
gsub(). See the String and IO docs
http://www.whytheluckystiff.net/ruby/pickaxe/html/bui...

> ------
>
> if value == "2"
> system('clear')
> print "[Opening file..]\n\n"
> r_file = File.open( "file", "a") #Wrote this so I wouldn't get an
> error like "File doesn't exist".
> r_file = File.open( "file", "r")
> print "-----\n"
> print r_file.read
> print "-----"
> print "\n"
> system ('ruby note.rb') #is there anyway to restart or goto the
> beginning of the script?
> end
>
> -----
>
> Thanks!

-d
--
darren kirby :: Part of the problem since 1976 :: http://badco...
"...the number of UNIX installations has grown to 10, with more expected..."
- Dennis Ritchie and Ken Thompson, June 1972

Robert Klemme

8/15/2006 8:53:00 PM

0

fabsy wrote:
> Hey!
> I have been trying to find a goto function in ruby..
> Like this:
>
> foo: bar
> If blabla then GOTO foo
>
> Is there any command for exiting the app?
> And how do I search ex a textfile for a certain word and delete it?
>
>
> ------
>
> if value == "2"
> system('clear')
> print "[Opening file..]\n\n"
> r_file = File.open( "file", "a") #Wrote this so I wouldn't get an
> error like "File doesn't exist".
> r_file = File.open( "file", "r")
> print "-----\n"
> print r_file.read
> print "-----"
> print "\n"
> system ('ruby note.rb') #is there anyway to restart or goto the
> beginning of the script?
> end
>
> -----
>
> Thanks!
>

begin
....
end while your_condition_here

begin
....
end until your_condition_here

If you need an endless loop

loop do
....
end

See also
http://ruby-doc.org/docs/ProgrammingRuby/html/tut_expressio...

Note that your script opens the file over and over again and never
closes it. This can cause problems - especially since you do it with
different modes.

Kind regards

robert

fabsy

8/15/2006 9:01:00 PM

0



> begin
> ...
> end while your_condition_here
>
> begin
> ...
> end until your_condition_here
>
> If you need an endless loop
>
> loop do
> ...
> end
>
> See also
> http://ruby-doc.org/docs/ProgrammingRuby/html/tut_expressio...
>
> Note that your script opens the file over and over again and never
> closes it. This can cause problems - especially since you do it with
> different modes.
>
> Kind regards
>
> robert

I don't really understand..

I want the script to start over again.. for example..
When the user made an input and pressed return I want the script to
"restart" or jump to the beginning..

Logan Capaldo

8/15/2006 9:28:00 PM

0


On Aug 15, 2006, at 5:05 PM, fabsy wrote:

>
>
>> begin
>> ...
>> end while your_condition_here
>>
>> begin
>> ...
>> end until your_condition_here
>>
>> If you need an endless loop
>>
>> loop do
>> ...
>> end
>>
>> See also
>> http://ruby-doc.org/docs/ProgrammingRuby/html/tut_expressio...
>>
>> Note that your script opens the file over and over again and never
>> closes it. This can cause problems - especially since you do it with
>> different modes.
>>
>> Kind regards
>>
>> robert
>
> I don't really understand..
>
> I want the script to start over again.. for example..
> When the user made an input and pressed return I want the script to
> "restart" or jump to the beginning..


I wouldn't recommend making this a habit but:

% cat cc.rb
x = 0
bar = callcc {|cc| cc}
puts "Hello"
x += 1
bar.call(bar) unless x == 3
puts "x is #{x}"

% ruby cc.rb
Hello
Hello
Hello
x is 3


Gary Wright

8/15/2006 9:51:00 PM

0


On Aug 15, 2006, at 5:28 PM, Logan Capaldo wrote:
> I wouldn't recommend making this a habit but:
>
> % cat cc.rb
> x = 0
> bar = callcc {|cc| cc}
> puts "Hello"
> x += 1
> bar.call(bar) unless x == 3
> puts "x is #{x}"

Yikes, someone asks questions which indicate that they
are a novice programmer and you throw continuations at them?

Isn't that like throwing someone in the deep end of the pool and
seeing if they can swim? Or maybe it is like holding them under
water and seeing if they have gills? :-)

Fasby wrote:
> I don't really understand..
>
> I want the script to start over again.. for example..
> When the user made an input and pressed return I want the script to
> "restart" or jump to the beginning..

You can use 'next' to begin the next iteration of a loop:

loop {
# your code here
if startover?
next # will cause loop to start over
end
# more stuff here
if quit?
break # to get out of the loop entirely
end
# more stuff here
}


Gary Wright




David Vallner

8/15/2006 9:52:00 PM

0

On Tue, 15 Aug 2006 23:05:10 +0200, fabsy <fabbyfabs@gmail.com> wrote:
> I want the script to start over again.. for example..
> When the user made an input and pressed return I want the script to
> "restart" or jump to the beginning..
>

Let me introduce you to my good friend: structured programming. I'm sure=
=

you'll get along marvelous once you get to know each other.

The BASIC construct of "goto" is rightfully considered harmful for =

programs above a certain complexity. It's not present in Ruby in any =

direct way that would let you jump around a program's structure =

arbitrarily. (Actually, that's a lie, but I'll hold the continuations fo=
r =

the sake of simplicity.)

If you want a script to start over, the easiest way is to put all the =

logic of the script into a function / procedure / whatever, and repeated=
ly =

call that one in a loop like Darren and Robert indicated.

If you want the script to react to user input, you could for example do:=


def do_stuff_with_file(r_file)
# Most of your original code goes here.
end

should_print_file =3D true
while should_print_file

# Better way to avoid file not found errors - you're creating a complet=
ely
# useless temporary file as a workaround. =

File.open('file') { | r_file | do_stuff_with_file(r_file) } if =

File.exist? ('file')

puts('Print file again? [y/n]')
should_print_file =3D (gets[0] =3D=3D 'y') # Flaky bit, should be more =
=

forgiving.

end

David Vallner

Timothy Goddard

8/15/2006 10:03:00 PM

0

fabsy wrote:
> Hey!
> I have been trying to find a goto function in ruby..
> Like this:
>
> foo: bar
> If blabla then GOTO foo
>
> Is there any command for exiting the app?
> And how do I search ex a textfile for a certain word and delete it?
>
>
> ------
>
> if value == "2"
> system('clear')
> print "[Opening file..]\n\n"
> r_file = File.open( "file", "a") #Wrote this so I wouldn't get an
> error like "File doesn't exist".
> r_file = File.open( "file", "r")
> print "-----\n"
> print r_file.read
> print "-----"
> print "\n"
> system ('ruby note.rb') #is there anyway to restart or goto the
> beginning of the script?
> end
>
> -----
>
> Thanks!

There is a reason why there are no gotos in Ruby or the vast majority
of modern languages. They are the complete antithesis of good program
design. You should be writing something more like this:

while value == 2
begin
system("clear") # This is a pretty bad idea - it's not portable and
completely unneccesary.
puts "[Opening file...]"
puts
File.open("file", "r") do |file|
puts "---"
puts file.read
puts "---"
end
system("ruby note.rb") # What is this for?
rescue Errno:ENOENT
puts "File does not exist."
end
end

This program properly handles file closing and uses exception handling
to pick up problems with opening the file. Exceptions and simple loops
can produce the same result as any GOTO mess while maintaining good
structure. I would avoid system() as well, but you may have your
reasons for using it.

Nate Smith

8/15/2006 10:09:00 PM

0

fabsy

8/15/2006 10:12:00 PM

0


Timothy Goddard skrev:

> fabsy wrote:
> > Hey!
> > I have been trying to find a goto function in ruby..
> > Like this:
> >
> > foo: bar
> > If blabla then GOTO foo
> >
> > Is there any command for exiting the app?
> > And how do I search ex a textfile for a certain word and delete it?
> >
> >
> > ------
> >
> > if value == "2"
> > system('clear')
> > print "[Opening file..]\n\n"
> > r_file = File.open( "file", "a") #Wrote this so I wouldn't get an
> > error like "File doesn't exist".
> > r_file = File.open( "file", "r")
> > print "-----\n"
> > print r_file.read
> > print "-----"
> > print "\n"
> > system ('ruby note.rb') #is there anyway to restart or goto the
> > beginning of the script?
> > end
> >
> > -----
> >
> > Thanks!
>
> There is a reason why there are no gotos in Ruby or the vast majority
> of modern languages. They are the complete antithesis of good program
> design. You should be writing something more like this:
>
> while value == 2
> begin
> system("clear") # This is a pretty bad idea - it's not portable and
> completely unneccesary.
> puts "[Opening file...]"
> puts
> File.open("file", "r") do |file|
> puts "---"
> puts file.read
> puts "---"
> end
> system("ruby note.rb") # What is this for?
> rescue Errno:ENOENT
> puts "File does not exist."
> end
> end
>
> This program properly handles file closing and uses exception handling
> to pick up problems with opening the file. Exceptions and simple loops
> can produce the same result as any GOTO mess while maintaining good
> structure. I would avoid system() as well, but you may have your
> reasons for using it.

Naa, Im just testing to create something simple.. I think thats the
best way of learning..
So the system() thingy is just for test. :)
the system("ruby note.rb") was just a solution to get the script to
"restart", I know it's a bad way but I had to try it. The system(clear)
was just so the screen was cleared.

Gennady Bystritsky

8/15/2006 10:24:00 PM

0



> -----Original Message-----
> From: Nathan Smith [mailto:nsmith5@umbc.edu]
> Sent: Tuesday, August 15, 2006 3:09 PM
> To: ruby-talk ML
> Subject: Re: goto function?
>
> On Wed, 16 Aug 2006, David Vallner wrote:
>
> > On Tue, 15 Aug 2006 23:05:10 +0200, fabsy
> <fabbyfabs@gmail.com> wrote:
> > > I want the script to start over again.. for example..
> > > When the user made an input and pressed return I want the
> script to
> > > "restart" or jump to the beginning..
> > >
> >
> > Let me introduce you to my good friend: structured
> programming. I'm sure
> > you'll get along marvelous once you get to know each other.
> >
> > The BASIC construct of "goto" is rightfully considered harmful for
> > programs above a certain complexity. It's not present in Ruby in any
> > direct way that would let you jump around a program's structure
> > arbitrarily. (Actually, that's a lie, but I'll hold the
> continuations for
> > the sake of simplicity.)
>
> <snip>
>
> Obligatory response:
>
> In some very rare circumstances, using gotos does in fact
> have a rightful
> place in code. In very long switch/case statements in C code, a _very_
> well structured (and properly named) set of labels/gotos can make code
> much cleaner, and easier to understand, than if they were not
> used. But
> I'll say again, this is very rare.

I have to respectfully disagree. Having actively used C (among many
others) since 1986 up until now for professional development, I NEVER
found a good use for it, even in my early days. Especially in
switch/case statements ;-). It may be _very_ well structured in the
beginning, becoming a total mess with time. Never had very long
switch/case statements even on very big projects either. This is where
lookup tables with function pointers come in handy, for one.

Gennady.

>
> Nate
>
>