ruby中如果我有一个包含几个包含模块的类实例,我可以动态地取消包含特定模块吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

如果我有一个包含几个包含模块的类实例,我可以动态地取消包含特定模块吗?

提问于
用户回答回答于

不可以。不能在Ruby中取消混入。在一些Ruby实现中,可以通过在C或Java中编写特定于实现的扩展(甚至在Rubinius的情况下甚至是Ruby)来实现。

用户回答回答于

这不是同样的事情,但你可以假装是这样的:

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!"

扫码关注云+社区