Bug #3123

uninitialized constant Object::C (NameError)

Added by Kazuhiro NISHIYAMA almost 5 years ago. Updated almost 4 years ago.

[ruby-dev:40951]
Status:Closed
Priority:Normal
Assignee:-
ruby -v:ruby 1.9.2dev (2010-04-10 trunk 27284) [x86_64-linux] Backport:

Description

=begin
いつの間にかトップレベルでの uninitialized constant で Object:: が付くようになってしまっています。

% ruby-trunk -ve C
ruby 1.9.2dev (2010-04-10 trunk 27284) [x86_64-linux]
-e:1:in `': uninitialized constant Object::C (NameError)
%

どこからなのか git bisect で調べてみたところ r25984 からのようです。
=end

History

#1 Updated by Yusuke Endoh over 4 years ago

  • Target version changed from 1.9.2 to 2.0.0

=begin
遠藤です。

いつの間にかトップレベルでの uninitialized constant で Object:: が付くようになってしまっています。

確かにバグだと思いますが明らかに重大でないことと、直そうとすると
意外と面倒っぽく、revert するのはそっちの方が大変更になるので、
1.9.2 では WONTFIX とします。
1.9.3 以降で元の挙動に戻ることはありえます。

--
Yusuke Endoh mame@tsg.ne.jp
=end

#2 Updated by Yukihiro Matsumoto over 4 years ago

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

=begin
This issue was solved with changeset r28293.
Kazuhiro, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

=end

#3 Updated by Yusuke Endoh over 4 years ago

=begin
遠藤です。

2010年6月12日11:28 Tadashi Saito shiba@mail2.accsnet.ne.jp:

いつの間にかトップレベルでの uninitialized constant で Object:: が付くようになってしまっています。

確かにバグだと思いますが明らかに重大でないことと、直そうとすると
意外と面倒っぽく、revert するのはそっちの方が大変更になるので、
1.9.2 では WONTFIX とします。

まつもとさんのr28293でtrunkでは直ったようなので、WONTFIXにせず、これを
1.9.2にも取り込んで欲しいです。手元では1.9.2でも直るのを確認しました。

いちRubyユーザーから言わせていただくと、「明らかに重大である」と思います。
すくなくとも僕の友人のような、Ruby初学者は多いに戸惑って、本を何度も読み直して、
自身をなくす落とし穴になると思います。新たなFAQになりかねないでしょう。

まつもとさんの修正だと class << Object.new; Foo; end のエラー
メッセージが変わってしまいます。

私は Object:: がつくかどうかは重大でないという立場ので、この
程度の非互換は構わないと思いますし、何がなんでもバックポートに
反対でもないです。
でも重大でない問題なら今は極力コードをいじりたくありません。

Object:: がつくかどうかが「明らかに重大である」という立場なら、
このパッチはバックポートはできないと思います。

ちなみに何が重大なんでしょうか。むしろ Object:: がついた方が
初学者には親切なのでは、という気もするのですが。

またまつもとさんの修正はシンプルなものなので、「大変更」にもならないと思います。

簡単に見える変更でも、気が付きにくい問題は入るものです。

--
Yusuke Endoh mame@tsg.ne.jp

=end

#4 Updated by whiteleaf _ over 4 years ago

=begin
whiteleaf と申します。

むしろ Object:: がついた方が
初学者には親切なのでは、という気もするのですが。

親切だと思えるのはトップレベルで定義した場合 Object に定義される
と知っているからだと思います。
Ruby を使う上では知っておくべき情報だとは思いますが、初学者にとって
は混乱のもとな気もします。

私も重大な問題ではないとは思いますが。

=end

Also available in: Atom PDF