response_to可能並不那麼明顯?以紅寶石工作。 考慮以下因素:respond_to?和受保護的方法
class A
def public_method
end
protected
def protected_method
end
private
def private_method
end
end
obj = A.new
obj.respond_to?(:public_method)
# true - that's pretty obvious
obj.respond_to?(:private_method)
# false - as expected
obj.respond_to?(:protected_method)
# true - WTF?
所以,如果 'OBJ' 響應protected_method我們應該期待
obj.protected_method
沒有引發異常,不是嗎?
...但它明顯提高
調用respond_to的文檔點?與第二個參數設置爲true檢查私有方法以及
obj.respond_to?(:private_method, true)
# true
而這更爲合理
所以,問題是如何檢查對象只響應公衆的方法? 有沒有比這更好的解決方案?
obj.methods.include?(:public_method)
# true
obj.methods.include?(:protected_method)
# false
我很難理解翻譯日語,但無論如何,很高興知道紅寶石核心考慮這個問題。至少有一個可以使用obj.class.public_method_defined?(:protected_method),它的工作方式與預期的一樣,但不會處理單例方法,所以我認爲這是一種解決方法,而不是真正的解決方案 – mlomnicki 2010-04-03 01:24:13
回答更新信息 – 2011-11-24 21:55:10