[ruby-trunk - Bug #10421] BasicObject継承クラスで object_id メソッドを定義すると redefining 警告が出る

Issue #10421 has been updated by Tsuyoshi Sawada.

method_missingを使用しているときにBasicObjectのインスタンスが紛れ込むと、デバッグするためにinspectで正体を見ようとすると無限再帰呼び出しを起こして収拾がつかなくなるので、inspectおよびそれに必要な最低限のメソッドは初めからBasicObjectに定義されていてもいいのではないかと思います。


Bug #10421: BasicObject継承クラスで object_id メソッドを定義すると redefining … 警告が出る

  • Author: Satoshi TAGOMORI
  • Status: Open
  • Priority: Normal
  • Assignee:
  • Category:
  • Target version:
  • ruby -v: ruby 2.1.3p242 (2014-09-19 revision 47630)
    [x86_64-darwin12.0]
  • Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN

BasicObject 継承クラスに通常 #object_id がありませんが、これだと pp などに該当オブジェクトを与えると
NoMethodError 例外が出たりして実用上困るケースがあります。ただし #object_id を定義すると以下のような警告が出ます。

warning: redefining `object_id' may cause serious problems

BasicObject には元々 #object_id は存在しないため redefining という警告はこの場合は誤りであり、また
#object_id を定義することの危険については意図してBasicObjectを使っているプログラマには理解されているものと思います。

このため、この警告は BasicObject 継承クラスにおいては出さないのが適当かと思います。