在紅寶石1.9.3,爲什麼Foo.explicit_receiver
產生錯誤「稱爲保護法」?受保護的方法錯誤
我引用這些教程:
- Protected Methods and Ruby 2.0
- Ruby Access Control – Are Private And Protected Methods Only A Guideline?
哪個州:
您可以隨時撥打一個受保護的方法有一個隱含的接收器,只需 像私人,但除此之外,你可以打電話給親只要這個接收者是自己或者是一個與自己相同的對象,就可以使用明確的接收者。
我打電話給一個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)
(忽略,手機上無法刪除客戶端將在稍後刪除。) –