Bug #7743
closedprotected なメソッドを respond_to? で評価した時の結果が 1.9 と異なる
Description
以下のようなコードを 1.9.3 と 2.0.0 で実行した時の結果が異なるようです。
% cat respond_to.rb
class A
def initialize
p respond_to?(:foo)
p respond_to?(:foo, true)
end
protected
def foo
end
end
A.new
実行結果は以下の通りです。
% ruby -v respond_to.rb
ruby 1.9.3p375 (2013-01-18 revision 38876) [x86_64-darwin12.2.1]
true
true
% ruby -v respond_to.rb
ruby 2.0.0dev (2013-01-27 trunk 38955) [x86_64-darwin12.2.1]
false
true
この挙動の違いは不具合と思うのですが確認していただけないでしょうか。
もし意図した挙動である場合、影響範囲が大きいので 1.9 の挙動に戻した方がよいと思います。
Updated by shugo (Shugo Maeda) almost 12 years ago
- Status changed from Open to Assigned
- Assignee changed from nobu (Nobuyoshi Nakada) to knu (Akinori MUSHA)
hsbt (Hiroshi SHIBATA) wrote:
以下のようなコードを 1.9.3 と 2.0.0 で実行した時の結果が異なるようです。
(snip)
この挙動の違いは不具合と思うのですが確認していただけないでしょうか。
もし意図した挙動である場合、影響範囲が大きいので 1.9 の挙動に戻した方がよいと思います。
r34582で導入された意図的な変更だと思います。
[ruby-dev:40461]のスレッドで議論されたものです。
呼び出し元のコンテキストにおけるレシーバのクラスをチェックして、そのprotectedメソッド
を呼べるクラスであればtrueを返すのが理想ではないかと思いますが、それが難しい場合は
互換性に配慮していったん元に戻すのがよいように思います。
Updated by hsbt (Hiroshi SHIBATA) almost 12 years ago
- Status changed from Assigned to Rejected
了解しました。
よくよく考えてみましたが、変更後の挙動の方が正しいと思いますのでクローズします。
影響のあったライブラリの方を直すことにします。
ご回答ありがとうございます。
Updated by kosaki (Motohiro KOSAKI) almost 11 years ago
Shugo Maeda wrote:
hsbt (Hiroshi SHIBATA) wrote:
以下のようなコードを 1.9.3 と 2.0.0 で実行した時の結果が異なるようです。
(snip)
この挙動の違いは不具合と思うのですが確認していただけないでしょうか。
もし意図した挙動である場合、影響範囲が大きいので 1.9 の挙動に戻した方がよいと思います。r34582で導入された意図的な変更だと思います。
ruby-dev:40461 のスレッドで議論されたものです。呼び出し元のコンテキストにおけるレシーバのクラスをチェックして、そのprotectedメソッド
を呼べるクラスであればtrueを返すのが理想ではないかと思いますが、それが難しい場合は
互換性に配慮していったん元に戻すのがよいように思います。
Updated by kosaki (Motohiro KOSAKI) almost 11 years ago
おおっと、間違えて変な変更をSubmitしてしまいました。無視してください