Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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]
like image 258
Anurag Avatar asked Apr 16 '11 02:04

Anurag


1 Answers

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 
like image 114
Mike Lewis Avatar answered Sep 21 '22 11:09

Mike Lewis