# How do i add an instance variable to a class in Ruby

**URL:** <https://www.ruby-forum.com/t/how-do-i-add-an-instance-variable-to-a-class-in-ruby/196211>\
**Category:** Ruby\
**Created:** [October 8, 2010, 4:10pm UTC](https://www.ruby-forum.com/t/how-do-i-add-an-instance-variable-to-a-class-in-ruby/196211 "2010-10-08T16:10:32Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![amit-singh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/9f8e36/32.png) [@amit-singh](https://www.ruby-forum.com/u/amit-singh)\
**Post date:** [October 8, 2010, 4:10pm UTC](https://www.ruby-forum.com/t/how-do-i-add-an-instance-variable-to-a-class-in-ruby/196211/1 "2010-10-08T16:10:32Z")

</div>

Hii all ,

I have one file named class1.rb this is structure

module Person  
class Amit  
def initialize  
@a=10  
end  
end  
end  
another file named class2.rb

module Person  
class Sumit \< Amit  
def aos  
puts “#{@a}”  
end  
end  
end

i am not access value of @a ,how should i do that

---

<div class="post-metadata">

**Author:** ![amit-singh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/9f8e36/32.png) [@amit-singh](https://www.ruby-forum.com/u/amit-singh)\
**Post date:** [October 8, 2010, 5:46pm UTC](https://www.ruby-forum.com/t/how-do-i-add-an-instance-variable-to-a-class-in-ruby/196211/2 "2010-10-08T17:46:46Z")

</div>

Amit T. wrote:

> i am not access value of @a ,how should i do that

What do you mean by “i am not access value”? Did you try to? What code  
did you try? Did you get an error message from it? What was the error  
and backtrace?

This works fine for me:

require ‘class1’  
require ‘class2’  
me = Person::Sumit.new  
me.aos

---

<div class="post-metadata">

**Author:** ![amit-singh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/9f8e36/32.png) [@amit-singh](https://www.ruby-forum.com/u/amit-singh)\
**Post date:** [October 9, 2010, 9:07am UTC](https://www.ruby-forum.com/t/how-do-i-add-an-instance-variable-to-a-class-in-ruby/196211/3 "2010-10-09T09:07:21Z")

</div>

Brian C. wrote:

> Amit T. wrote:
> 
> > i am not access value of @a ,how should i do that
> 
> What do you mean by “i am not access value”? Did you try to? What code  
> did you try? Did you get an error message from it? What was the error  
> and backtrace?
> 
> This works fine for me:
> 
> require ‘class1’  
> require ‘class2’  
> me = Person::Sumit.new  
> me.aos

i didn’t get any error meassage but in class2.rb i tried to print @a  
value using puts “#{@a}” .but got the blank o/p

---

<div class="post-metadata">

**Author:** ![amit-singh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/9f8e36/32.png) [@amit-singh](https://www.ruby-forum.com/u/amit-singh)\
**Post date:** [October 9, 2010, 1:24pm UTC](https://www.ruby-forum.com/t/how-do-i-add-an-instance-variable-to-a-class-in-ruby/196211/4 "2010-10-09T13:24:53Z")

</div>

Amit T. wrote:

> i didn’t get any error meassage but in class2.rb i tried to print @a  
> value using puts “#{@a}” .but got the blank o/p

brian@zino:~$ cat class1.rb  
module Person  
class Amit  
def initialize  
@a=10  
end  
end  
end  
brian@zino:~$ cat class2.rb  
module Person  
class Sumit \< Amit  
def aos  
puts “#{@a}”  
end  
end  
end  
brian@zino:~$ cat run.rb  
require ‘class1’  
require ‘class2’  
me = Person::Sumit.new  
me.aos  
brian@zino:~$ ruby run.rb  
10  
brian@zino:~$

So it works perfectly for me. So you need to work out what’s different  
for you.

I’m running under Ubuntu Lucid x86, with this ruby version:

brian@zino:~$ ruby -v  
ruby 1.8.7 (2010-01-10 patchlevel 249) [x86\_64-linux]

But this is such a simple piece of code that it should run the same  
anywhere. So I imagine your code is different. Directly copy-paste the  
_exact_ code you are running. Directly copy-paste _exactly_ what you see  
when you run it.

Sometimes it’s useful to run ruby with -w flag: i.e.

ruby -w run.rb

---

<div class="post-metadata">

**Author:** ![amit-singh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/9f8e36/32.png) [@amit-singh](https://www.ruby-forum.com/u/amit-singh)\
**Post date:** [October 10, 2010, 3:37am UTC](https://www.ruby-forum.com/t/how-do-i-add-an-instance-variable-to-a-class-in-ruby/196211/5 "2010-10-10T03:37:54Z")

</div>

On Fri, Oct 8, 2010 at 9:12 AM, Amit T. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> ```
> @a=10
> 
> ```
> 
> end  
> end
> 
> ## i am not access value of @a ,how should i do that
> 
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).

Worked for me, are you sure you required the other file?

Make sure you have “require File.dirname( **FILE** ) + ‘/a’” at the top  
(you  
don’t have to make it ugly like this unless you’re using 1.9.2)

---

<div class="post-metadata">

**Author:** ![amit-singh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/9f8e36/32.png) [@amit-singh](https://www.ruby-forum.com/u/amit-singh)\
**Post date:** [October 10, 2010, 2:19am UTC](https://www.ruby-forum.com/t/how-do-i-add-an-instance-variable-to-a-class-in-ruby/196211/6 "2010-10-10T02:19:22Z")

</div>

In class1.rb and class2.rb you create templates for the classes.  
To display @a you must:  
1- require class1.rb and class2.rb  
2-istantiate the class Sumit  
3-call the method aos  
as in:  
irb  
irb(main):001:0\> require ‘class1’  
=\> true  
irb(main):002:0\> require ‘class2’  
=\> true  
irb(main):003:0\> c2=Person::Sumit.new # istantiate the class  
=\> #\<Person::Sumit:0x2d89c58 @a=10\>  
irb(main):004:0\> c2.aos # display variable @a  
10  
=\> nil  
irb(main):005:0\> quit

HTH gfb

“Amit T.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote in message  
news:removed\_email\_address@domain.invalid…

---

<div class="post-metadata">

**Author:** ![amit-singh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/9f8e36/32.png) [@amit-singh](https://www.ruby-forum.com/u/amit-singh)\
**Post date:** [October 11, 2010, 9:20am UTC](https://www.ruby-forum.com/t/how-do-i-add-an-instance-variable-to-a-class-in-ruby/196211/7 "2010-10-11T09:20:37Z")

</div>

Thanks all for your response ,what am doing wrong is ,using

def initialize1  
@a=10

end

instead of initialize am using initialize1 but what if i have some  
other function instead initialize ,then how could access this variable  
@a???

---

<div class="post-metadata">

**Author:** ![amit-singh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/9f8e36/32.png) [@amit-singh](https://www.ruby-forum.com/u/amit-singh)\
**Post date:** [October 11, 2010, 9:59am UTC](https://www.ruby-forum.com/t/how-do-i-add-an-instance-variable-to-a-class-in-ruby/196211/8 "2010-10-11T09:59:52Z")

</div>

On Mon, Oct 11, 2010 at 9:20 AM, Amit T. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> Thanks all for your response ,what am doing wrong is ,using
> 
> def initialize1  
> @a=10
> 
> end
> 
> instead of initialize am using initialize1 but what if i have some  
> other function instead initialize ,then how could access this variable  
> @a???

In Ruby, instance variables are created the first time you assign them  
some value. It can be done in the initialize method or in any other  
method:

class A  
def a=(value)  
@a = value  
end  
def a  
@a  
end  
end

a = A.new  
a.a = 3  
puts a.a

Now, if you try to access it before setting it, you will get nil:

a = A.new  
puts a.a

Jesus.
