Search code examples
rubyvariablesinstance-variablesclass-variables

Instance variable in ruby acting like class variable


@ - instance variable @@ - class variable.

So instance variable value shouldn't be shared if no instance is created. But:

class Add

  def self.add(what)
    if not defined? @a
      @a = 0
    end
    @a += what
    puts @a.to_s
  end
end

Add.add(4)
Add.add(4)

Results in:

$ruby main.rb

4
8

Why?


Solution

  • Every class in Ruby is also an object, instance of Class class. So, your @a is simply instance variable of Add class.