gpt4 book ai didi

ruby - 我可以包含/扩展模块但将所有包含/扩展的方法标记为私有(private)吗?

转载 作者:数据小太阳 更新时间:2023-10-29 07:15:19 27 4
gpt4 key购买 nike

说,我有一个类 A和一个模块 B .我想包括/扩展 B进入A但将包含/扩展方法标记为私有(private)(因此 A 的调用者无法访问它们,但可以在 A 的方法内部访问)。

如何包含 B进入A但将所有包含的方法标记为私有(private)?

最佳答案

包含然后显式将所有包含的方法设为私有(private)?

class A
include B
private *B.instance_methods
extend B
class << self
private *B.instance_methods
end
end

你可以修改 Module 以添加 private_includeprivate_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

关于ruby - 我可以包含/扩展模块但将所有包含/扩展的方法标记为私有(private)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15644484/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com