--485b397dd56d45557c04b24bc3ef Content-Type: text/plain; charset=ISO-8859-1 Agreed. This was a bug in 1.9.2 probably caused by the (aborted) attempt to change constant lookup rules in 1.9. Yehuda Katz (ph) 718.877.1325 On Mon, Nov 21, 2011 at 8:59 PM, Shugo Maeda <shugo / ruby-lang.org> wrote: > It was a bug of 1.9.2 and fixed in 1.9.3. > > http://redmine.ruby-lang.org/issues/4536 (in Japanese) > > Constants should be lookuped statically. > The behaviour is the same as 1.8. > > 2011/11/22 11:37 "Gary Bernhardt" <gary.bernhardt / gmail.com>: > > > > > > > Issue #5657 has been reported by Gary Bernhardt. > > > > ---------------------------------------- > > Bug #5657: Constants in included modules aren't visible when defining > classes with Class.new > > http://redmine.ruby-lang.org/issues/5657 > > > > Author: Gary Bernhardt > > Status: Open > > Priority: Normal > > Assignee: > > Category: > > Target version: > > ruby -v: ruby 1.9.3p0 (2011-11-08) [x86_64-darwin10.8.0] > > > > > > I define two classes that include a module. One is defined with `class`, > one is defined with `Class.new`. I expect both to be able to reference > constants in the included module. The `class` one can, but the `Class.new` > one can't. Reproducing code: > > > > module X > > module Y > > end > > end > > > > class Class1 > > include X > > def self.f > > # Works: Y is printed > > p Y > > end > > end > > > > Class2 lass.new do > > include X > > def self.f > > # Fails: "uninitialized constant Y" > > p Y > > end > > end > > > > Class1.f > > Class2.f > > > > It works with 1.9.2: > > > > $ ruby -v > > ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin10.8.0] > > $ ruby bug.rb > > X::Y > > X::Y > > > > but not 1.9.3-p0: > > > > $ ruby -v > > ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin10.8.0] > > $ ruby bug.rb > > X::Y > > bug.rb:18:in `f': uninitialized constant Y (NameError) > > from bug.rb:23:in `<main>' > > > > or 1.9.3-head: > > > > $ ruby -v > > ruby 1.9.3p0 (2011-11-08) [x86_64-darwin10.8.0] > > $ ruby bug.rb > > X::Y > > bug.rb:18:in `f': uninitialized constant Y (NameError) > > from bug.rb:23:in `<main>' > > > > I discovered this because it RSpec specs when going to 1.9.3: > https://github.com/rspec/rspec-core/issues/506 > > > > > > -- > > http://redmine.ruby-lang.org > > > > --485b397dd56d45557c04b24bc3ef Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Agreed. This was a bug in 1.9.2 probably caused by the (aborted) attempt tohange constant lookup rules in 1.9.<div><br clear="all">Yehuda Katz<br>(ph) 718.877.1325<br> <br><br><div class="gmail_quote">On Mon, Nov 21, 2011 at 8:59 PM, Shugo Maeda <span dir="ltr"><shugo / ruby-lang.org></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"> <p>It was a bug of 1.9.2 and fixed in 1.9.3.</p> <p><a href="http://redmine.ruby-lang.org/issues/4536" target="_blank">http://redmine.ruby-lang.org/issues/4536</a> (in Japanese)</p> <p>Constants should be lookuped statically. <br> The behaviour is the same as 1.8.</p> <p>2011/11/22 11:37 "Gary Bernhardt" <<a href="mailto:gary.bernhardt / gmail.com" target="_blank">gary.bernhardt / gmail.com</a>>:</p><div><div class="h5"><br> ><br> ><br> > Issue #5657 has been reported by Gary Bernhardt.<br> ><br> > ----------------------------------------<br> > Bug #5657: Constants in included modules aren't visible when defining classes with Class.new<br> > <a href="http://redmine.ruby-lang.org/issues/5657" target="_blank">http://redmine.ruby-lang.org/issues/5657</a><br> ><br> > Author: Gary Bernhardt<br> > Status: Open<br> > Priority: Normal<br> > Assignee:<br> > Category:<br> > Target version:<br> > ruby -v: ruby 1.9.3p0 (2011-11-08) [x86_64-darwin10.8.0]<br> ><br> ><br> > I define two classes that include a module. One is defined with `class`, one is defined with `Class.new`. I expect both to be able to reference constants in the included module. The `class` one can, but the `Class.new` one can't. Reproducing code:<br> ><br> > module X<br> > ¨ÂïäõìÙ¼âò> ¨Âîä¼âò¾ > end<br> ><br> > class Class1<br> > ¨Âîãìõäå Ø¼âò> ¨Âåæ óåìæ®æ¼âò¾ > Works: Y is printed<br> > ¨Â Ù¼âò> ¨Âîä¼âò¾ > end<br> ><br> > Class2 = Class.new do<br> > ¨Âîãìõäå Ø¼âò> ¨Âåæ óåìæ®æ¼âò¾ > Fails: "uninitialized constant Y"<br> > ¨Â Ù¼âò> ¨Âîä¼âò¾ > end<br> ><br> > Class1.f<br> > Class2.f<br> ><br> > It works with 1.9.2:<br> ><br> > $ ruby -v<br> > ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin10.8.0]<br> > $ ruby bug.rb<br> > X::Y<br> > X::Y<br> ><br> > but not 1.9.3-p0:<br> ><br> > $ ruby -v<br> > ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin10.8.0]<br> > $ ruby bug.rb<br> > X::Y<br> > bug.rb:18:in `f': uninitialized constant Y (NameError)<br> > ¨Âòïâõç®ò⺲³ºéî à¦ìô»íáéî¦çô»¦£³¹»¼âò¾ ><br> > or 1.9.3-head:<br> ><br> > $ ruby -v<br> > ruby 1.9.3p0 (2011-11-08) [x86_64-darwin10.8.0]<br> > $ ruby bug.rb<br> > X::Y<br> > bug.rb:18:in `f': uninitialized constant Y (NameError)<br> > ¨Âòïâõç®ò⺲³ºéî à¦ìô»íáéî¦çô»¦£³¹»¼âò¾ ><br> > I discovered this because it RSpec specs when going to 1.9.3: <a href="https://github.com/rspec/rspec-core/issues/506" target="_blank">https://github.com/rspec/rspec-core/issues/506</a><br> ><br> ><br> > --<br> > <a href="http://redmine.ruby-lang.org" target="_blank">http://redmine.ruby-lang.org</a><br> ><br> </div></div><p></p> </blockquote></div><br></div> --485b397dd56d45557c04b24bc3ef--