Skip to content

Instantly share code, notes, and snippets.

@jballanc
Created April 30, 2009 05:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jballanc/104272 to your computer and use it in GitHub Desktop.
Save jballanc/104272 to your computer and use it in GitHub Desktop.
irb(main):001:0> class A
irb(main):002:1> def foo
irb(main):003:2> puts "In class A"
irb(main):004:2> end
irb(main):005:1>
irb(main):006:1* def my_meta
irb(main):007:2> class << self
irb(main):008:3> self
irb(main):009:3> end
irb(main):010:2> end
irb(main):011:1> end
=> nil
irb(main):012:0> a = A.new
=> #<A:0x1005b14f8>
irb(main):013:0> a.foo
In class A
=> nil
irb(main):014:0> A_meta = a.my_meta
=> #<Class:#<A:0x1005b14f8>>
irb(main):015:0> class A_meta
irb(main):016:1> def bar
irb(main):017:2> puts "Not in Kansas anymore"
irb(main):018:2> end
irb(main):019:1> end
=> nil
irb(main):020:0> a.bar
Not in Kansas anymore
=> nil
irb(main):021:0> b = A_meta.new
TypeError: can't create instance of virtual class
from (irb):21:in `new'
from (irb):21
irb(main):022:0> b = A.new
=> #<A:0x100536910>
irb(main):023:0> b.foo
In class A
=> nil
irb(main):024:0> b.bar
NoMethodError: undefined method `bar' for #<A:0x100536910>
from (irb):24
irb(main):025:0>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment