Forum: Ruby-dev [ruby-trunk - Feature #7190][Open] warning: already initialized constant の書式

Posted by Tsuyoshi S. (tsuyoshi_s)
on 2012-10-20 04:01
(Received via mailing list)
Issue #7190 has been reported by sawa (Tsuyoshi Sawada).

----------------------------------------
Feature #7190: warning: already initialized constant の書式
https://bugs.ruby-lang.org/issues/7190

Author: sawa (Tsuyoshi Sawada)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:


未定義の定数を参照した場合のエラーメッセージでは名前空間がすべて表示されます:

    module A; B; end
    #=> NameError: uninitialized constant A::B
    A::B
    #=> NameError: uninitialized constant A::B

しかし、既に定義してある定数を再定義した場合の警告メッセージでは名前空間が表示されません:

    module A; B = :foo end
    module A; B = :bar end
    #=> warning: already initialized constant B
    A::B = :baz
    #=> warning: already initialized constant B

後者の場合も前者の場合にならって名前空間を表示した方がよいと思います。

    warning: already initialized constant A::B

メタプログラミングで、$stderr = 
StringIO.new のように警告メッセージをリダイレクトしてコード内で定数の再定義を捕捉したい場合に、名前空間なしでは問題になっている定数を再現できません。
Posted by mame (Yusuke Endoh) (Guest)
on 2012-11-24 01:33
(Received via mailing list)
Issue #7190 has been updated by mame (Yusuke Endoh).

Status changed from Open to Assigned
Assignee set to nobu (Nobuyoshi Nakada)
Target version set to next minor


----------------------------------------
Feature #7190: warning: already initialized constant の書式
https://bugs.ruby-lang.org/issues/7190#change-33685

Author: sawa (Tsuyoshi Sawada)
Status: Assigned
Priority: Normal
Assignee: nobu (Nobuyoshi Nakada)
Category:
Target version: next minor


未定義の定数を参照した場合のエラーメッセージでは名前空間がすべて表示されます:

    module A; B; end
    #=> NameError: uninitialized constant A::B
    A::B
    #=> NameError: uninitialized constant A::B

しかし、既に定義してある定数を再定義した場合の警告メッセージでは名前空間が表示されません:

    module A; B = :foo end
    module A; B = :bar end
    #=> warning: already initialized constant B
    A::B = :baz
    #=> warning: already initialized constant B

後者の場合も前者の場合にならって名前空間を表示した方がよいと思います。

    warning: already initialized constant A::B

メタプログラミングで、$stderr = 
StringIO.new のように警告メッセージをリダイレクトしてコード内で定数の再定義を捕捉したい場合に、名前空間なしでは問題になっている定数を再現できません。
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.