require something, Ruby looks for a matching file in all the directories in the load path. The load path is stored in the global variable
Consider the following directory structure:
top_level.rb underlings/ slave.rb equal.rb
You’ll get an error if you try to
require "slave" from top_level.rb. When you
require something, Ruby looks for a matching file in the directories of the
$LOAD_PATH. The directory underlings/ is not automatically added to the
$LOAD_PATH by Ruby, so the
If you on the other hand add underlings/ to the
$LOAD_PATH, it will work. Adding directories to the load path is easy.
# top_level.rb $LOAD_PATH << File.join(File.dirname(__FILE__), "underlings") require "slave"
File.join is used to get the full absolute path to the underlings/ directory. You should only put absolute paths such as
"C:\foo\bar" on Windows) in the
$LOAD_PATH, and avoid things like
$LOAD_PATH << "lib/foo".
The snippet above will run successfully, because the require statement is able to handle
"slave" based on what’s in the
$LOAD_PATH. As you can see,
$LOAD_PATH is an array, and the directory names it contains are strings.
The current directory is in the load path
If you inspect
$LOAD_PATH in IRb, you’ll find
"." in it. That dot reperesents the current directory, and lets you require a file that is in the same directory as the file you require from. If foo.rb and bar.rb, you can
require "bar" from foo.rb without modifying the
That $: thing
$: is a shorthand for
$LOAD_PATH. So now you know.
$LOAD_PATH is longhand for
$:. Yeah! Thanks, bryanl.)
Questions or comments?