metaprogramming/class_variable_defined_parens.rb
tests/_examples/metaprogramming/class_variable_defined_parens.rb in the metorex repository.
# Module#class_variable_set / class_variable_defined? — written with
# 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