A little help needed

Hi,I'm new here.

I have a question:

What exactly does the '@' symbol mean when used for the scope of a
variable?
For instance: @screen=[640,400].

I haven't found anything explicitly explaining exactly what this does.

Thanks!

···

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

It means it's an instance variable of the object that is currently
self in that context.
For example:

class A
def initialize
@value = 3
end
end

a = A.new

The object referenced by a has an instance variable called @value with value 3.

Jesus.

···

On Fri, Apr 2, 2010 at 9:42 PM, Tom Stone <s1ay3r44@gmail.com> wrote:

Hi,I'm new here.

I have a question:

What exactly does the '@' symbol mean when used for the scope of a
variable?
For instance: @screen=[640,400].

I haven't found anything explicitly explaining exactly what this does.

Oh! I see!

So it's a variable that is automtically given to each instance of that
class right?

···

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

So it's a variable that is automtically given to each instance of that
class right?

Not quite... it's a variable in the instance that it is declared. So,
if you put it in the 'initialize' method as seen in that example, it
will assign that variable for that instance when it is created.

-Jonathan Nielsen

Jonathan Nielsen wrote:

So it's a variable that is automtically given to each instance of that
class right?

Not quite... it's a variable in the instance that it is declared. So,
if you put it in the 'initialize' method as seen in that example, it
will assign that variable for that instance when it is created.

-Jonathan Nielsen

So... it's a variable that can only be used in that instance and nowhere
else?

such as:

Class Test

def initialize
@x=5
end

def testing
puts"#{@x}"
end
end

problem=Test.new

problem.testing

5

#however

puts"#{@x}"

···

error

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

problem=Test.new

problem.testing

5

#however

puts"#{@x}"

error

Yes, it can only be used within that class. You can, however, create
an accessor for it like this:

class Test
def initialize
@x = 5
end

attr_accessor :x
end

solution = Test.new
solution.x (=>5)

solution.x = 6
solution.x (=>6)

-Jonathan Nielsen

You can also just say @x, here, because puts will convert the objects it
receives into strings by calling the to_s method on them
puts "#{@x}"
puts @x.to_s
puts @x

In this case will all be the same, there is no need to interpolate strings
here.

At least in 1.9.1 this is true. I tried it in 1.8 and the last one outputted
"nil" which is odd, and the only way I can think of that would explain it is
that puts checks to see if the variable is nil before calling to_s, and
explicitly outputs "nil" if it is.

···

On Fri, Apr 2, 2010 at 2:15 PM, Tom Stone <s1ay3r44@gmail.com> wrote:

puts"#{@x}"
>error

Jonathan Nielsen wrote:

Yes, it can only be used within that class. You can, however, create
an accessor for it like this:

class Test
def initialize
@x = 5
end

attr_accessor :x
end

solution = Test.new
solution.x (=>5)

solution.x = 6
solution.x (=>6)

-Jonathan Nielsen

Yep, already knew that. Thanks for clearing this up for me. I'm creating
a game for school you see so I needed to know exacly what that meant.

(Now I can understand more of what's happening in source code) :wink:

···

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