尝试了解私有和受保护在用于类方法时的工作原理我来自some other question的此代码:
class Bang
def instance_bang
self.class.class_bang
end
protected
def self.class_bang
puts "bang"
end
end
从Bang的实例调用 instance_bang 按预期工作,但是当我采用 class<<的方法时,我无法理解以下代码的不同之处自
class Bang
def instance_bang
self.class.class_bang
end
class << self
protected
def class_bang
puts "bang"
end
end
end
对我而言,两段代码似乎都是相同的,但第二段代码失败, NoMethodError 声称 class_bang 受到保护。
答案 0 :(得分:2)
在第二个代码块中,protected用于指定Bang类方法的可见性。但是'def self.class_bang'在Bang的单例类上定义了一个方法,因此受保护的密钥不适用于该方法。
在第一个代码块中,你打开Bang的单例类,所以protected用于指定Bang的单例类方法的可见性,这意味着protected将适用于class_bang方法。这就是你得到错误的原因。
有关详情,请参阅:http://blog.jayfields.com/2006/11/ruby-protected-class-methods.html