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

Issue #7190 has been reported by sawa (Tsuyoshi Sawada).


Feature #7190: warning: already initialized constant の書式

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 のように警告メッセージをリダイレクトしてコード内で定数の再定義を捕捉したい場合に、名前空間なしでは問題になっている定数を再現できません。

Issue #7190 has been updated by mame (Yusuke E.).

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


Feature #7190: warning: already initialized constant の書式

Author: sawa (Tsuyoshi Sawada)
Status: Assigned
Priority: Normal
Assignee: nobu (Nobuyoshi N.)
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 のように警告メッセージをリダイレクトしてコード内で定数の再定義を捕捉したい場合に、名前空間なしでは問題になっている定数を再現できません。