说,我有一个 classA
和一个 module B
。我想包含/扩展B
,A
但将包含/扩展的方法标记为私有(因此调用者无法访问它们,A
但可以在 的方法中访问它们A
)。
如何包含但将所有包含的方法标记B
为A
私有?
包含然后显式地将所有包含的方法设为私有?
class A
include B
private *B.instance_methods
extend B
class << self
private *B.instance_methods
end
end
您可以猴子补丁Module
添加private_include
和private_extend
:
class Module
def private_include *modules
class_eval do
self.send(:include, *modules)
modules.each do |mod|
self.send(:private, *mod.instance_methods)
end
end
end
def private_extend *modules
singleton = class << self; self end
singleton.instance_eval do
self.send(:include, *modules)
modules.each do |mod|
self.send(:private, *mod.instance_methods)
end
end
end
end