Skip to content

Instantly share code, notes, and snippets.

@liangzan
Created June 7, 2010 09:38
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save liangzan/428467 to your computer and use it in GitHub Desktop.
Save liangzan/428467 to your computer and use it in GitHub Desktop.
klass = String
metaclass = class << klass; self; end
baz = "baz"
metaclass.class_eval(%\def foo; 'foo'; end\)
# defines class methods
# klass.foo = 'foo'
# String.foo = 'foo'
metaclass.instance_eval(%\def foo; 'foo'; end\)
# creates methods for that metaclass instance
# String.foo = error
# metaclass.foo = 'foo'
# klass.foo = error
klass.class_eval(%\def foo; 'foo'; end\)
# creates an instance method
# "bar".foo = 'foo'
klass.instance_eval(%\def foo; 'foo'; end\)
# creates class methods
# klass.foo = 'foo'
# String.foo = 'foo'
String.class_eval(%\def foo; 'foo'; end\)
# creates instance methods
# "bar".foo = 'foo'
String.instance_eval(%\def foo; 'foo'; end\)
# creates class methods
# String.foo = 'foo'
# klass.foo = 'foo'
baz.instance_eval(%\def foo; 'foo'; end\)
# creates instance methods for that particular instance
# baz.foo = 'foo'
# "bar".foo = error
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment