2013-12-17 34 views
1

我想将实例方法的可见性从公共更改为私有。如何更改实例方法的可见性

ooo = Object.new 
def ooo.some_public; 'woot' end 
ooo.some_publiC# => "woot" 
ooo.respond_to?(:some_public) # => true 

我想ooo.some_public是私人的。我怎样才能做到这一点?

回答

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 
0

你真正想要的是定义私有单例方法。这是可以做到这样:

class << ooo 
    private 
    def some_public 
    'woot' 
    end 
end 
ooo.respond_to?(:some_public) 
# => false 
0

要改变在运行时,你可以使用呼叫Kernel#private方法与现有方法的可见性:

private :some_public 

或者更准确地说:

class << ooo 
    private :some_public 
end 
# ⇒ <Class:#<Object:0x00000003467140>> < Object 
ooo.respond_to?(:some_public) 
# ⇒ false 

希望它有帮助。