我想将实例方法的可见性从公共更改为私有。如何更改实例方法的可见性
ooo = Object.new
def ooo.some_public; 'woot' end
ooo.some_publiC# => "woot"
ooo.respond_to?(:some_public) # => true
我想ooo.some_public
是私人的。我怎样才能做到这一点?
我想将实例方法的可见性从公共更改为私有。如何更改实例方法的可见性
ooo = Object.new
def ooo.some_public; 'woot' end
ooo.some_publiC# => "woot"
ooo.respond_to?(:some_public) # => true
我想ooo.some_public
是私人的。我怎样才能做到这一点?
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
你真正想要的是定义私有单例方法。这是可以做到这样:
class << ooo
private
def some_public
'woot'
end
end
ooo.respond_to?(:some_public)
# => false
要改变在运行时,你可以使用呼叫Kernel#private
方法与现有方法的可见性:
private :some_public
或者更准确地说:
class << ooo
private :some_public
end
# ⇒ <Class:#<Object:0x00000003467140>> < Object
ooo.respond_to?(:some_public)
# ⇒ false
希望它有帮助。