Skip to content

Instantly share code, notes, and snippets.

@ihower
Created April 14, 2010 23:15
Show Gist options
  • Save ihower/366463 to your computer and use it in GitHub Desktop.
Save ihower/366463 to your computer and use it in GitHub Desktop.
class Dragon
def test
"test"
end
end
d = Dragon.new
puts d.test # test
# 呼叫 super (1)
def d.test
"super1 " + super
end
puts d.test # super1 test
# 呼叫 super (2)
d.instance_eval do
def test
"super2 " + super
end
end
puts d.test # super2 test
# 呼叫 super (3)
metaclass = ( class << d; self; end )
metaclass.class_eval do
def test
"super3 " + super
end
end
puts d.test # super3 test
# -----------------------------------------------------------
Dragon.class_eval do
def test
"blah"
end
end
puts d.test # "super3 blah". Why?
Dragon.class_eval do
def test
super
end
end
puts d.test # fails. Why?
# Because "Dragon.class_eval + def" overrides original Dragon instance method, not singleton method.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment