metaprogramming/class_variable_defined.rb
tests/_examples/metaprogramming/class_variable_defined.rb in the metorex repository.
# Module#class_variable_set / class_variable_defined? — written without
# parentheses. A class variable assigned inside `class << self` attaches to
# the lexical enclosing class, and lookup walks included modules and
# superclasses.
class Counter
@@count = 0
class << self
@@meta = :info
end
end
module Trackable
@@tracked = true
end
class Widget < Counter
include Trackable
end
puts Counter.class_variable_defined? :@@count
puts Counter.class_variable_defined? "@@count"
puts Counter.class_variable_defined? :@@missing
puts Counter.class_variable_defined? :@@meta
Counter.class_variable_set :@@count, 5
puts Counter.class_variable_defined? :@@count
puts Widget.class_variable_defined? :@@tracked
puts Widget.class_variable_defined? :@@count
c = Class.new
c.class_variable_set :@@local, "here"
puts c.class_variable_defined? :@@local
puts c.class_variable_defined? :@@other
Output:
true
true
false
true
true
true
true
true
false