[ruby-trunk - Bug #7743][Open] protected なメソッドを respond to? で評価した時の結果が 1.9 と異なる

Issue #7743 has been reported by hsbt (Hiroshi SHIBATA).


Bug #7743: protected なメソッドを respond_to? で評価した時の結果が 1.9 と異なる
https://bugs.ruby-lang.org/issues/7743

Author: hsbt (Hiroshi SHIBATA)
Status: Open
Priority: Normal
Assignee: nobu (Nobuyoshi N.)
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2013-01-27 trunk 38955) [x86_64-darwin12.2.1]

以下のようなコードを 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 の挙動に戻した方がよいと思います。

Issue #7743 has been updated by shugo (Shugo M.).

Status changed from Open to Assigned
Assignee changed from nobu (Nobuyoshi N.) to knu (Akinori MUSHA)

hsbt (Hiroshi SHIBATA) wrote:

以下のようなコードを 1.9.3 と 2.0.0 で実行した時の結果が異なるようです。
(snip)
この挙動の違いは不具合と思うのですが確認していただけないでしょうか。
もし意図した挙動である場合、影響範囲が大きいので 1.9 の挙動に戻した方がよいと思います。

r34582で導入された意図的な変更だと思います。
[ruby-dev:40461]のスレッドで議論されたものです。

呼び出し元のコンテキストにおけるレシーバのクラスをチェックして、そのprotectedメソッド
を呼べるクラスであればtrueを返すのが理想ではないかと思いますが、それが難しい場合は
互換性に配慮していったん元に戻すのがよいように思います。


Bug #7743: protected なメソッドを respond_to? で評価した時の結果が 1.9 と異なる
https://bugs.ruby-lang.org/issues/7743#change-35680

Author: hsbt (Hiroshi SHIBATA)
Status: Assigned
Priority: Normal
Assignee: knu (Akinori MUSHA)
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2013-01-27 trunk 38955) [x86_64-darwin12.2.1]

以下のようなコードを 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 の挙動に戻した方がよいと思います。

Issue #7743 has been updated by Motohiro KOSAKI.

Shugo M. wrote:

を呼べるクラスであればtrueを返すのが理想ではないかと思いますが、それが難しい場合は
互換性に配慮していったん元に戻すのがよいように思います。


Bug #7743: protected なメソッドを respond_to? で評価した時の結果が 1.9 と異なる
https://bugs.ruby-lang.org/issues/7743#change-45777

  • Author: Hiroshi SHIBATA
  • Status: Rejected
  • Priority: Normal
  • Assignee: Akinori MUSHA
  • Category: core
  • Target version: 2.0.0
  • ruby -v: ruby 2.0.0dev (2013-01-27 trunk 38955) [x86_64-darwin12.2.1]
  • Backport:

以下のようなコードを 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 の挙動に戻した方がよいと思います。

Issue #7743 has been updated by hsbt (Hiroshi SHIBATA).

Status changed from Assigned to Rejected

了解しました。

よくよく考えてみましたが、変更後の挙動の方が正しいと思いますのでクローズします。
影響のあったライブラリの方を直すことにします。

ご回答ありがとうございます。

Bug #7743: protected なメソッドを respond_to? で評価した時の結果が 1.9 と異なる
https://bugs.ruby-lang.org/issues/7743#change-35684

Author: hsbt (Hiroshi SHIBATA)
Status: Rejected
Priority: Normal
Assignee: knu (Akinori MUSHA)
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2013-01-27 trunk 38955) [x86_64-darwin12.2.1]

以下のようなコードを 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 の挙動に戻した方がよいと思います。

Issue #7743 has been updated by Motohiro KOSAKI.

おおっと、間違えて変な変更をSubmitしてしまいました。無視してください


Bug #7743: protected なメソッドを respond_to? で評価した時の結果が 1.9 と異なる
https://bugs.ruby-lang.org/issues/7743#change-45778

  • Author: Hiroshi SHIBATA
  • Status: Rejected
  • Priority: Normal
  • Assignee: Akinori MUSHA
  • Category: core
  • Target version: 2.0.0
  • ruby -v: ruby 2.0.0dev (2013-01-27 trunk 38955) [x86_64-darwin12.2.1]
  • Backport:

以下のようなコードを 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 の挙動に戻した方がよいと思います。