どのように応答するかはあまり明白ではないかもしれません。ルビーで動作します。次のことを考慮してください。
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? を呼び出すことを指摘していますか? 2 番目の引数を true に設定すると、プライベート メソッドもチェックされます
obj.respond_to?(:private_method, true)
# true
そして、それははるかに合理的です
問題は、オブジェクトがパブリック メソッドのみに応答するかどうかを確認する方法です。それよりも良い解決策はありますか?
obj.methods.include?(:public_method)
# true
obj.methods.include?(:protected_method)
# false