From: Wyatt Greene Date: 2008-01-31T00:09:57+09:00 Subject: Re: Start and stop a ruby loop ;( You're almost there. First of all, in Ruby, you don't declare your instance variables outside of methods. You just set them inside of a method, and they get automatically declared. For example: class Foo def bar @baz = 3 end def qux @quux = 4 end def show_me p @baz p @quux end end If you say: a = Foo.new a.show_me It should print: nil nil Because the object's instance variables of @baz and @quux haven't been initialized. If you say: a = Foo.new a.bar a.show_me It should print: 3 nil because when the bar method was called, it initialized the @baz variable to 3. Likewise, if you say: a = Foo.new a.bar a.qux a.show_me You will get: 3 4 Also, it looks like you want to use a while loop instead of a for loop. So for your example, you could do this: class MyFirstClass def start_my_loop while !@stop_loop puts 'Im inside the loop..............' end end def stop_my_loop @stop_loop = true end end Notice that when you call start_my_loop, if @stop_loop hasn't yet been initialized, its value is nil. This means that it will begin executing the loop. If you wanted to explicitly set the value of @stop_loop from the get-go, then use a constructor: class MyFirstClass def initialize @stop_loop = false end def start_my_loop while !@stop_loop puts 'Im inside the loop..............' end end def stop_my_loop @stop_loop = true end end So now you can use this code like this: a = MyFirstClass.new a.start_my_loop a.stop_my_loop However, this will not work. Once the program enters the loop, it stays there. You need some way to pass control of the program to outside of the loop, otherwise, you'll be looping forever. One way to do this is to use multiple threads. Another way is to use blocks, like this: class MyFirstClass def start_my_loop while yield puts 'Im inside the loop..............' end end end a = MyFirstClass.new a.start_my_loop do if rand(5) == 3 false else true end end Every time the program gets to the yield statement, it calls the block that you passed to the start_my_loop method. This block randomly returns true or false. If it returns true, the loop is executed again. I hope this was helpful! Cheers, Wyatt Greene On Jan 30, 8:44 am, Sameera Gayan wrote: > Hi all, > > I have the following loop > > class myFirstClass > is_loop = 0 > > def start_my_loop > for is_loop < 1 > puts 'Im inside the loop..............' > end > end > > end > > i can start above class's loop by using following... > > require 'myFirstClass' > class mySecondClass > oFirst = myFirstClass.new > oFirst.start_my_loop > end > > and i need a way to stop the above loop from calling another method. > Like... > calling a nother method to make the 'is_loop' to 1 > > but the problem is when i use the > myFirstClass.new --> is_loop to 0 > > so can anyone tell me a way to do this. I want to start the loop from > one method and stop it from another. (Or what is the way to do this) > > I'm sorry if i'm doing something wrong coz i'm nwe to ruby > > thankx in advance > > cheers > sameera > -- > Posted viahttp://www.ruby-forum.com/.