Variables and scope

Hi all,

I would be asking my instructor this question be she is not available
on
the weekends...

How do I make "n" available from anywhere inside the class? I need to
keep the values in n from call to call.

When calling the method "pt", "n" acts as if it was not declared above.

I get -1 instead of what I wish for ... 99.

Thanks in advance,

Mike

class Test
n=100

  def pt
   puts "hi there"
   n=-1
  end

end

t = Test.new
puts t.pt

···

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

take note of the usage of @ for scope as well as the special
initialize method used as a constructor for the object.

also note note you common bug/mistake. Your where setting n to
negative one. you need to use n = n + -1 or shorthand version below is
n += -1

class Test
  def initialize
  @n = 100
  end

  def pt
    p "hi there"
    @n += -1
  end
end

t = Test.new
puts t.pt

If you would like to know more have a look at attr_* in ruby

Good luck with your classes

~Stu

···

On Fri, Feb 4, 2011 at 10:17 PM, Mike 1. <mike17931793@gmail.com> wrote:

Hi all,

I would be asking my instructor this question be she is not available
on
the weekends...

How do I make "n" available from anywhere inside the class? I need to
keep the values in n from call to call.

When calling the method "pt", "n" acts as if it was not declared above.

I get -1 instead of what I wish for ... 99.

Thanks in advance,

Mike

class Test
n=100

def pt
puts "hi there"
n=-1
end

end

t = Test.new
puts t.pt

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

You are getting a -1 because you are using local variables. Thus, the n within your def is not the same as the n within your class.
Since you declared n to be -1 in your def, that is what your program responded with, a -1.
You need to initialize an instance variable that will be available throughout the class.

You can also make your code more utilitarian with a parameter value that can be changed any time you create a new instance.
Try the following:

class Test

  def initialize(n)
    @n = n
  end

  def pt
    puts "hi there"
    @n -= 1
  end
end

t = Test.new(100)
puts t.pt

This way, you are not tied down to the value 100, but can use any value you want.
I am new at this game and just taking the baby steps, but this seemed to work.

Lauren

···

On Feb 5, 2011, at 12:15 AM, Stu wrote:

take note of the usage of @ for scope as well as the special
initialize method used as a constructor for the object.

also note note you common bug/mistake. Your where setting n to
negative one. you need to use n = n + -1 or shorthand version below is
n += -1

class Test
def initialize
@n = 100
end

def pt
   p "hi there"
   @n += -1
end
end

t = Test.new
puts t.pt

If you would like to know more have a look at attr_* in ruby

Good luck with your classes

~Stu

On Fri, Feb 4, 2011 at 10:17 PM, Mike 1. <mike17931793@gmail.com> wrote:

Hi all,

I would be asking my instructor this question be she is not available
on
the weekends...

How do I make "n" available from anywhere inside the class? I need to
keep the values in n from call to call.

When calling the method "pt", "n" acts as if it was not declared above.

I get -1 instead of what I wish for ... 99.

Thanks in advance,

Mike

class Test
n=100

def pt
  puts "hi there"
  n=-1
end

end

t = Test.new
puts t.pt

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