Skip to content

Instantly share code, notes, and snippets.

@clicube
Created November 22, 2013 16:19
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 clicube/7602531 to your computer and use it in GitHub Desktop.
Save clicube/7602531 to your computer and use it in GitHub Desktop.
extendで追加されたメソッドを削除したい
module M
def m
:M
end
end
class C
def m
:C
end
end
c = C.new
c.extend M
c.m #=> :M
# ここで M 由来の m を削除して、
# c.m で C の m が呼ばれて :C が返されるようにしたいのだけれど・・・
# 今は extend する前に c.method(:m) を保存しておいて、
# 再度 define_method :m でそれを呼び出すっていうふうにしている
c2 = C.new
m2 = c2.method(:m)
c2.extend M
c2.m #=> :M
c2.singleton_class.class_eval do
define_method :m do
m2.call
end
end
c2.m #=> :C
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment