What's the difference between Kernel.require and Kernel.gem_original_require?
Yuri Kanivetsky <[email protected]> Fri, 25 Oct 2019 21:09:15 +0300
| Newsgroups | gmane.comp.lang.ruby.general |
|---|---|
| Message-ID | <CAMhVC3aifaTddHgBb1RK-HvZjDWipEeER0zVm=Bu1vdog7ce4g@mail.gmail.com> |
Hi,
Consider the following script:
module Kernel
unless defined?(gem_original_require_2)
alias gem_original_require_2 require
private :gem_original_require_2
end
def require(path)
return gem_original_require_2(path)
end
end
p method(:require) # #<Method: main.require>
p method(:require).owner # Kernel
p method(:require).receiver # main
p method(:require).source_location # ["1.rb", 7]
puts '-' * 10
p Kernel.method(:require) # #<Method: Kernel.require>
p Kernel.method(:require).owner # #<Class:Kernel>
p Kernel.method(:require).receiver # Kernel
p Kernel.method(:require).source_location # nil
puts '-' * 10
p Kernel.method(:gem_original_require) # #<Method:
Kernel.gem_original_require(require)>
p Kernel.method(:gem_original_require).owner # Kernel
p Kernel.method(:gem_original_require).receiver # Kernel
p Kernel.method(:gem_original_require).source_location # nil
puts '-' * 10
p Kernel.method(:gem_original_require_2) # #<Method:
Kernel.gem_original_require_2(require)>
p Kernel.method(:gem_original_require_2).owner # Kernel
p Kernel.method(:gem_original_require_2).receiver # Kernel
p Kernel.method(:gem_original_require_2).source_location #
["/home/yuri/.rubies/ruby-2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb",
34]
Do you know why Kernel is sometimes a class, sometimes a module? Why
do they have different receivers? Does receiver become self when
method gets called?
But more importantly, are Kernel.require and
Kernel.gem_original_require the same method? Is there any other place
where Kernel.require gets overridden? Thanks in advance.
Regards,
Yuri
Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-talk>