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!

On Fri, Apr 2, 2010 at 9:42 PM, Tom S. [email protected] 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.

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.

Oh! I see!

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

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 N.

Jonathan N. 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 N.

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

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 N.

Jonathan N. 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 N.

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:

On Fri, Apr 2, 2010 at 2:15 PM, Tom S. [email protected] wrote:

puts"#{@x}"

error

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.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs