From: fxn@... Date: 2021-08-07T13:17:15+00:00 Subject: [ruby-core:104824] [Ruby master Bug#15790] Strange interaction between autoload and $LOADED_FEATURES Issue #15790 has been updated by fxn (Xavier Noria). Indeed, the concept of undefined constants for me is dubious. An autoload claims that the constant should be in the given file, but you don't know until the file is evaluated. So, it has been always surprising to me that the constants API acts as if the constant was actually defined for real. ---------------------------------------- Bug #15790: Strange interaction between autoload and $LOADED_FEATURES https://bugs.ruby-lang.org/issues/15790#change-93166 * Author: fxn (Xavier Noria) * Status: Open * Priority: Normal * ruby -v: ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18] * Backport: 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN ---------------------------------------- If an autoload fails and we remove its associated file from `$LOADED_FEATURES`, the autoload is back: ``` $ cat x.rb Y = 1 # should be X, emulates a typo $ cat test.rb def au Object.autoload?(:X).inspect end x_rb = File.realpath("x.rb") autoload :X, x_rb puts "before failed autoload autoload path is #{au}" X rescue nil puts "after failed autoload autoload path is #{au}" $LOADED_FEATURES.delete(x_rb) puts "after $LOADED_FEATURES deletion autoload path is #{au}" ``` The output is ``` $ ruby -v test.rb ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18] before failed autoload autoload path is "/Users/fxn/tmp/x.rb" after failed autoload autoload path is nil after $LOADED_FEATURES deletion autoload path is "/Users/fxn/tmp/x.rb" ``` See? Last line would be expected to print a `nil` autoload path. -- https://bugs.ruby-lang.org/ Unsubscribe: