Issue #8834 has been updated by phluid61 (Matthew Kerwin).


sawa (Tsuyoshi Sawada) wrote:
> > phluid61
> 
> I think what you wrote is the other way around. The only-once feature is due to the division of labor, not the other way around. See this:
> 
> http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/21562

I understand. I had a slightly different definition of "script" in my head.  I'd forgotten that require doesn't need an extension (and can thus load any .rb, .so, etc. file), where load requires the extension.

In that vein, I personally have never seen anyone use require/_relative when they should have used load.  I've never seen a project that has "scripts" that aren't library code, even if they're only project-specific libraries.

Note: I'm not arguing against #load_relative exactly, I've just never seen a need.  Maybe its existence, and an education campaign, can make it useful.
----------------------------------------
Feature #8834: Kernel#load_relative
https://bugs.ruby-lang.org/issues/8834#change-41423

Author: sawa (Tsuyoshi Sawada)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 


The intended difference between `Kernel#require` and `Kernel#load` is that the former is for external libraries and the latter is for Ruby scripts internal to the project. Considering this fact, `load` should be more likely than `require` to be used in a situation where you want to call a file through a relative path. Strangely, there is `Kernel#require_relative`, but no `Kernel#load_relative`. I request `Kernel#load_relative`. It is even more necessary than `Kernel#require_relative`.

It seems to me that people are using `Kernel#require_relative` when they want to use a relative path, even in the context where they are supposed to use `load` because of the lack of `Kernel#load_relative`. I don't think this is a good practice. Furthermore, in cases where you have a file without a `.rb` or other extention that you want to call via a relative path, there is no good way to do it.



-- 
http://bugs.ruby-lang.org/