class MetaCVar
  def self.map1
    @@map1 ||= {}
  end

  foo = (map1['foo'] ||= {})
  puts foo.inspect
  puts map1['foo'].inspect
  puts @@map1.inspect
  map1['foo']['bar'] = "baz"

  class << self
    def map2
      @@map2 ||= {}
    end
  end

  foo = (map2['foo'] ||= {})
  puts foo.inspect
  puts map2['foo'].inspect
  puts @@map2.inspect
  map2['foo']['bar'] = "baz"
end

MRI Output


			
agardiner@Ads-MacBook:~/rubinius(master)$ ruby ~/test_meta_cvar.rb 
{}
{}
{"foo"=>{}}
{}
{}
{"foo"=>{}}

Rubinius Output


			
agardiner@Ads-MacBook:~/rubinius(master)$ bin/rbx ~/test_meta_cvar.rb 
{}
{}
{"foo"=>{}}
{}
nil
{}
An exception has occurred:
    No method '[]=' on an instance of NilClass. (NoMethodError)

Backtrace:
    Kernel(NilClass)#[]= (method_missing_cv) at kernel/core/kernel.rb:647
          MetaCVar.__class_init__ (MetaCVar) at /Users/agardiner/test_meta_cvar.rb:22
                           Object#__script__ at /Users/agardiner/test_meta_cvar.rb:1
                    CompiledMethod#as_script at kernel/core/compiled_method.rb:379
                         Compile.single_load at kernel/core/compile.rb:252
                 Compile.load_from_extension at kernel/core/compile.rb:324
                           Object#__script__ at kernel/loader.rb:291