Issue #10741 has been updated by jeremyevans0 (Jeremy Evans).
Status changed from Open to Closed
This was fixed between 2.6 and 2.7.0-preview1:
```
$ ruby26 a.rb
in b
true
$ ruby27 a.rb
true
```
----------------------------------------
Bug #10741: const_defined? triggers autoload where it did not before
https://bugs.ruby-lang.org/issues/10741#change-79196
* Author: headius (Charles Nutter)
* Status: Closed
* Priority: Normal
* Assignee:
* Target version:
* ruby -v: 2.0.0
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
This should not cause b.rb to load, but it does in 2.2:
~/projects/jruby $ cat a.rb
module Foo
autoload :Bar, 'b.rb'
end
p Foo.const_defined?('Bar')
~/projects/jruby $ cat b.rb
puts "in b"
module Foo
Bar = 1
end
~/projects/jruby $ rvm ruby-2.0 do ruby -I. a.rb
true
~/projects/jruby $ rvm ruby-2.1 do ruby -I. a.rb
in b
true
~/projects/jruby $ rvm ruby-2.2 do ruby -I. a.rb
in b
true
This is likely caused by the :: support in const_get/const_defined not doing autoload-free traversal.
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>