metaprogramming/class_variables.rb

tests/_examples/metaprogramming/class_variables.rb in the metorex repository.

# Module#class_variables — written without parentheses. Returns class
# variable names as symbols in definition order. The optional `inherit`
# argument controls whether class variables from ancestors are included.
class Base
  @@base = 1
  @@shared = 2
end

class Derived < Base
  @@derived = 3
end

puts Base.class_variables.inspect
puts Derived.class_variables.inspect

own = Derived.class_variables false
puts own.inspect

module Flags
  @@flag = :on
end

puts Flags.class_variables.inspect

Output:

[:@@base, :@@shared]
[:@@derived, :@@base, :@@shared]
[:@@derived]
[:@@flag]