From: Shugo Maeda Date: 2011-11-22T13:59:18+09:00 Subject: [ruby-core:41191] Re: [ruby-trunk - Bug #5657][Open] Constants in included modules aren't visible when defining classes with Class.new --00151747374449432304b24baa5b Content-Type: text/plain; charset=ISO-8859-1 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" : > > > 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 = Class.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 `
' > > 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 `
' > > 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 > --00151747374449432304b24baa5b Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable

It was a bug of 1.9.2 and fixed in 1.9.3.

=A0 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 defin= ing classes with Class.new
> http://redmine.ru= by-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 c= onstants in the included module. The `class` one can, but the `Class.new` o= ne can't. Reproducing code:
>
> module X
> =A0module Y
> =A0end
> end
>
> class Class1
> =A0include X
> =A0def self.f
> =A0 =A0# Works: Y is printed
> =A0 =A0p Y
> =A0end
> end
>
> Class2 =3D Class.new do
> =A0include X
> =A0def self.f
> =A0 =A0# Fails: "uninitialized constant Y"
> =A0 =A0p Y
> =A0end
> 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)
> =A0 =A0 =A0 =A0from 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)
> =A0 =A0 =A0 =A0from bug.rb:23:in `<main>'
>
> I discovered this because it RSpec specs when going to 1.9.3: https://github.com/rspe= c/rspec-core/issues/506
>
>
> --
> http://redmine.ruby-lang.org<= /a>
>

--00151747374449432304b24baa5b--