From: "fxn (Xavier Noria) via ruby-core" Date: 2025-04-22T07:00:49+00:00 Subject: [ruby-core:121704] [Ruby Misc#21154] Document or change Module#autoload? Issue #21154 has been updated by fxn (Xavier Noria). > So, Zeitwerk is able to avoid the limitation clarified in this ticket, right? Maybe, but do you think that any Ruby program setting autoloads should manually check `caller_locations` and emulate what `autoload?` does? And that is not only about dynamic calls, you should do it for static calls too. Think about this. You ship a gem like this: ```ruby # my_gem.rb module MyGem autoload :M, ... end # my_gem/m.rb module MyGem module M autoload :X, ... # (1) end end # my_gem/m/x.rb module MyGem module M X = 1 end end ``` Now, Bundler loads `my_gem.rb` when the project boots, and the user does in their application: ```ruby require "my_gem/m/x" ``` When (1) is reached, the file is being required, but that is out of the control of the author of the gem. So, in (1) it should manually check `caller_locations` to comply with the documentation? > The current behavior of autoload? and const_defined? is intentional. > These methods return truthy values when the constant is considered available in the current context. Wouldn't you prefer to leave things as they were, and document this? Not having this documented was a problem for me, because I expected the predicate to return what the docs say. ---------------------------------------- Misc #21154: Document or change Module#autoload? https://bugs.ruby-lang.org/issues/21154#change-112757 * Author: fxn (Xavier Noria) * Status: Feedback * Assignee: mame (Yusuke Endoh) ---------------------------------------- The documentation of `Module#autoload?` says > Returns filename to be loaded if name is registered as autoload in the namespace of mod or one of its ancestors. Cool, but in the following snippet ```ruby autoload :Foo, 'foo' autoload?(:Foo) ``` the second line could evaluate to `nil`, and this does not seem to agree. I just registered an autoload, therefore (according to the documentation) I should get "foo" back in line 2. I'd like to ask for clarification from the Ruby team: 1. Is the documentation complete? Should that second line always return "foo"? 2. If the answer is no, which is the logic missing in the docs? Thank you! -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/