Skip to content

Instantly share code, notes, and snippets.

@ggarnier
Last active August 29, 2015 13:56
Show Gist options
  • Save ggarnier/8941441 to your computer and use it in GitHub Desktop.
Save ggarnier/8941441 to your computer and use it in GitHub Desktop.
Class variables and class instance variables in Ruby
class Superclass
@@var1 = "var 1 Superclass"
@var2 = "var 2 Superclass"
def self.var1
@@var1
end
def self.var2
@var2
end
end
class Subclass < Superclass
@@var1 = "var 1 Subclass"
@var2 = "var 2 Subclass"
end
Superclass.class_variable_get(:@@var1) # "var 1 Subclass"
Superclass.instance_variable_get(:@var2) # "var 2 Superclass"
Subclass.class_variable_get(:@@var1) # "var 1 Subclass"
Subclass.instance_variable_get(:@var2) # "var 2 Subclass"
# Another example
class A
def self.var
@@var ||= begin
puts "defining @@var"
Time.now
end
end
end
class B < A
end
2.0.0p353 :014 > A.class_variable_defined?(:@@var)
false
2.0.0p353 :015 > B.class_variable_defined?(:@@var)
false
2.0.0p353 :016 > A.var
defining @@var
2014-02-19 11:26:17 -0300
2.0.0p353 :017 > A.var
2014-02-19 11:26:17 -0300
2.0.0p353 :018 > A.class_variable_defined?(:@@var)
true
2.0.0p353 :019 > B.class_variable_defined?(:@@var)
true
2.0.0p353 :020 > B.var
2014-02-19 11:26:17 -0300
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment