Когда вы включаете миксин в класс, вы фактически добавляете методы, определенные в модуле, в класс или заменяете методы в классе на методы в модуле с тем же именем. Класс не связан с модулем, поэтому «отмена определения» модуля M
не повлияет на класс C
. Все, что вам нужно, это помешать вам смешать M
за пределами этой точки.
Вы можете использовать undef_method
для удаления методов из класса C
, но это может иметь побочные эффекты, потенциально - если метод был переопределен путем добавления модуля, вы не получите исходный назад, например. Отмена определения метода класса довольно уродлива.
C.send(:undef_method, :instance_method_from_module)
class << C
self
end.send(:undef_method, :class_method_from_module)