如何更改实例方法的可见性

时间:2013-12-17 10:06:39

标签: ruby visibility

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

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

我希望ooo.some_public是私密的。我怎么能这样做?

3 个答案:

答案 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

希望它有所帮助。