How to Access a Ruby Instance Variable From Outside the Class?

In Ruby, you cannot directly access class instance variables (i.e. @variable) from outside the class:

class Foo
    def initialize
        @bar = "foobar"
    end
end

foo = Foo.new

# undefined method `bar` for Foo:Class (NoMethodError)
puts foo.bar

To access a class instance variable, you must create a class instance method that returns the value of the instance variable:

class Foo
    def initialize
        @bar = "foobar"
    end

    def bar
        @bar
    end
end

foo = Foo.new
puts foo.bar #=> "foobar"

Alternatively, you may also use attr_reader (or attr_accessor) accessor method to make an instance variable accessible from outside. These automatically generate getter methods for instance variables:

class Foo
    def initialize
        @bar = "foobar"
    end

    # creates getter for `@bar`
    attr_reader :bar
end

foo = Foo.new
puts foo.bar #=> "foobar"
class Foo
    def initialize
        @bar = "foobar"
    end

    # creates getter/setter for `@bar`
    attr_accessor :bar
end

foo = Foo.new
puts foo.bar #=> "foobar"

It is not possible to access a class instance variable from a class method.


This post was published by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.