Project

General

Profile

Actions

Bug #10421

closed

BasicObject継承クラスで object_id メソッドを定義すると redefining ... 警告が出る

Added by tagomoris (Satoshi Tagomori) over 9 years ago. Updated over 9 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.1.3p242 (2014-09-19 revision 47630) [x86_64-darwin12.0]
[ruby-dev:48691]

Description

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

warning: redefining `object_id' may cause serious problems

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

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

Updated by sawa (Tsuyoshi Sawada) over 9 years ago

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

Updated by nobu (Nobuyoshi Nakada) over 9 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

Applied in changeset r48111.


vm_method.c: no redefinition warnings for undefined methods

  • vm_method.c (rb_method_entry_make): warn redefinition only for
    already defined methods, but not for undefined methods.
    [ruby-dev:48691] [Bug #10421]

Updated by nagachika (Tomoyuki Chikanaga) over 9 years ago

  • Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN to 2.0.0: REQUIRED, 2.1: REQUIRED

Updated by nagachika (Tomoyuki Chikanaga) over 9 years ago

  • Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED to 2.0.0: REQUIRED, 2.1: DONE

Backported into ruby_2_1 at r48138.

Updated by usa (Usaku NAKAMURA) over 9 years ago

  • Backport changed from 2.0.0: REQUIRED, 2.1: DONE to 2.0.0: DONE, 2.1: DONE

Backported into ruby_2_0_0 at r48149.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0