Environment
Provide at least:
- JRuby version (
jruby -v) and command line (flags, JRUBY_OPTS, etc)
jruby 9.2.5.0-SNAPSHOT (2.5.0) 2018-11-22 93f0df3 OpenJDK 64-Bit Server VM 25.181-b13 on 1.8.0_181-8u181-b13-1ubuntu0.16.04.1-b13 +jit [linux-x86_64]
- Operating system and platform (e.g.
uname -a)
Ubuntu 16.04
Linux max-u1604 4.4.0-139-generic #165-Ubuntu SMP Wed Oct 24 10:58:50 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Problem
I expect Kernel.autoload :Hi, 'somefile' to do something useful. Right now, the only way found to trigger that autoload is do call .singleton_class::Hi on any class (It can be String, Object, etc). I really doubt there is any usecase for this.
In MRI, Kernel#autoload and Kernel.autoload always use the Module.nested of the calling context.
In JRuby, Kernel#autoload uses the object of the calling code. (This difference only shows up if the autoload call is in an instance method of a module, which is included in a class, and the method is called from an instance of the class.. Not something to worry about)
However, JRuby seems to special case Kernel.autoload weirdly. Looking at the code:
|
// special behavior if calling Kernel.autoload directly |
|
module = runtime.getObject().getSingletonClass(); |
Ideally, Kernel.autoload would behave the same as calling Kernel#autoload.
Environment
Provide at least:
jruby -v) and command line (flags, JRUBY_OPTS, etc)jruby 9.2.5.0-SNAPSHOT (2.5.0) 2018-11-22 93f0df3 OpenJDK 64-Bit Server VM 25.181-b13 on 1.8.0_181-8u181-b13-1ubuntu0.16.04.1-b13 +jit [linux-x86_64]uname -a)Ubuntu 16.04
Linux max-u1604 4.4.0-139-generic #165-Ubuntu SMP Wed Oct 24 10:58:50 UTC 2018 x86_64 x86_64 x86_64 GNU/LinuxProblem
I expect
Kernel.autoload :Hi, 'somefile'to do something useful. Right now, the only way found to trigger that autoload is do call.singleton_class::Hion any class (It can beString,Object, etc). I really doubt there is any usecase for this.In MRI,
Kernel#autoloadandKernel.autoloadalways use theModule.nestedof the calling context.In JRuby,
Kernel#autoloaduses the object of the calling code. (This difference only shows up if theautoloadcall is in an instance method of a module, which is included in a class, and the method is called from an instance of the class.. Not something to worry about)However, JRuby seems to special case
Kernel.autoloadweirdly. Looking at the code:jruby/core/src/main/java/org/jruby/RubyKernel.java
Lines 222 to 223 in 93f0df3
Ideally,
Kernel.autoloadwould behave the same as callingKernel#autoload.