Anurag
Anurag

Reputation: 141859

Ruby creating instance variables outside a class

What does it mean to create an instance variable, say @foo in a file outside any class definition. Say there is a file, test.rb and the entire contents of the file are given below.

# test.rb
@foo = "bar"
puts @foo

It prints "bar", but is this an instance variable in some sort of wrapping class?

Testing using two files indicates that there is a main object that everything is wrapped inside. Is this understanding correct?

Contents of a.rb

@me = self
@a = "from-a"

Contents of b.rb

require "./a"

@b = "from-b"
puts @me == self # true (self refers to the same object)
puts self.class  # Object
puts self.instance_variables # [@a, @b, @me]

Upvotes: 11

Views: 3163

Answers (1)

Mike Lewis
Mike Lewis

Reputation: 64137

Everything is an object in ruby. So you are actually in the main object right now, which is an instance of Object.

In your file, if you put puts self.class, you will see you are operating under main, and the class being Object.

Even in irb, for example:

ruby-1.9.2-p136 :001 > self
 => main 
ruby-1.9.2-p136 :002 > self.class
 => Object 

Upvotes: 18

Related Questions