【发布时间】:2009-06-19 18:43:26
【问题描述】:
您将模块包含在类中以扩展类功能,即向该特定类添加类方法和实例方法。
module M
def self.class_method_from_module
'from class_method_from_module'
end
def instance_method_from_module
'from instance_method_from_module'
end
end
class C
include M
def self.class_method
'from class_method'
end
def instance_method
'from instance_method'
end
end
puts C.class_method => 'from class_method'
puts C.class_method_from_module => 'from class_method_from_module'
puts C.new.instance_method => 'from instance_method'
puts C.new.instance_method_from_module => 'instance_method_from_module'
现在即使在从内存中删除模块 M 之后:
Object.send(:remove_const, :M) #remove the module M
puts C.class_method_from_module => 'from class_method_from_module'
puts C.new.instance_method_from_module => 'instance_method_from_module'
而不是缺少方法。这是为什么?删除模块添加到类的功能的最佳方法是什么?
【问题讨论】:
标签: ruby-on-rails ruby