Это не на самом деле одно и то же, но вы можете подделать что-то вроде этого:
module A
def hello
puts "hi!"
end
end
class B
include A
end
class C
include A
end
B.new.hello # prints "Hi!"
class Module
def uninclude(mod)
mod.instance_methods.each do |method|
undef_method(method)
end
end
end
class B
uninclude A
end
B.new.hello rescue puts "Undefined!" # prints "Undefined!"
C.new.hello # prints "Hi!"
Это может работать в общем случае, но может укусить вас в более сложных случаях, например, когда модуль вставляет себя в цепочку наследования, или у вас есть другие модули, предоставляющие методы, названные так же, как вы все еще хотите иметь возможность звонить. Вам также необходимо вручную повернуть все, что делает Module.included?(klass)
.