如何从Ruby中的实例方法访问受保护的类方法?

我一定不知道人们如何在Ruby中做到这一点.

如果取消注释’#protected’,我们会得到:
在’what’中:受保护的方法’zoop’调用Foo:Class(NoMethodError)

有没有更好的方法来处理受保护的类方法?

class Foo
  class << self
    #protected
    def zoop 
      "zoop"
    end
  end
  public
  def what
    "it is '#{self.class.zoop}'"
  end
  protected
end

a = Foo.new
p a.what # => "it is 'zoop'"

我想zoop受保护或私人(没有叫’Foo.zoop’),但到目前为止,我似乎无法找到一种优雅的方式.

最佳答案
将方法设置为私有或受Ruby保护几乎不重要,因为您可以调用send()来绕过它们.

如果你想让zoop保持受保护,请使用send(),如下所示:

def what
  "it is '#{self.class.send(:zoop)}'"
end

转载注明原文:如何从Ruby中的实例方法访问受保护的类方法? - 代码日志