今天在 github 上看到别人的一段代码,觉得挺有意思,大致结构如下:
module M
module ClassMethods
def method_missing(name, *args)
puts 'Hello world!'
end
end
class << self
include ClassMethods
def included(klass)
klass.extend(ClassMethods) if klass.is_a? Module
end
end
end
使用例子
class C
include M
end
C.nomethod() #=> "Hello world!"
这样其他的类或模块只要 include 这个模块,就会调用这个自定义的 method_missing 方法。