我想将实例方法的可见性从公共更改为私有。
ooo = Object.new
def ooo.some_public; 'woot' end
ooo.some_public # => "woot"
ooo.respond_to?(:some_public) # => true
我希望ooo.some_public
是私密的。我怎么能这样做?
答案 0 :(得分:3)
ooo = Object.new
def ooo.some_public; 'woot' end
ooo.respond_to?(:some_public) # => true
ooo.singleton_class.class_eval{private :some_public}
ooo.respond_to?(:some_public) # => false
答案 1 :(得分:0)
你真正想要的是定义私有单身人士方法。它可以这样做:
class << ooo
private
def some_public
'woot'
end
end
ooo.respond_to?(:some_public)
# => false
答案 2 :(得分:0)
要在运行时更改现有方法可见性,可以使用Kernel#private
方法调用:
private :some_public
或者更准确地说:
class << ooo
private :some_public
end
# ⇒ <Class:#<Object:0x00000003467140>> < Object
ooo.respond_to?(:some_public)
# ⇒ false
希望它有所帮助。