在 ruby 1.9.3 中,为什么会Foo.explicit_receiver
产生“受保护的方法调用”错误?
我正在参考这些教程:
哪一个州:
您始终可以使用隐式接收器调用受保护的方法,就像私有一样,但此外,您可以使用显式接收器调用受保护的方法,只要此接收器是 self 或与 self 相同的类的对象。
我用一个Foo
实例调用受保护的,这应该允许我调用受保护的方法。我肯定错过了一些东西:)
代码示例
class Foo
def implicit_receiver
protected_method
end
def explicit_receiver
self.protected_method
end
def self.explicit_receiver
Foo.new.tap do |foo|
foo.protected_method
end
end
protected
def protected_method
p "called protected method!"
end
end
foo = Foo.new
foo.implicit_receiver
foo.explicit_receiver
Foo.explicit_receiver
# output
# "called protected method!"
# "called protected method!"
# protected.rb:12:in `explicit_receiver': protected method `protected_method' called for #<Foo:0x10a280978> (NoMethodError)