Here is a table that gives the differences
| load | require | |
| file path | absolute/relative | absolute/relative |
| file extension | Required | Optional |
| Can load a file multiple times | Yes | No |
The file path and file extension rows are pretty straightforward. The most important difference is the third row, Can load a file multiple times. You can load a file multiple times by using method load, but for require, you can't. That's because The absolute path of the loaded file is added to $LOADED_FEATURES. Every time a new file is going to be required, ruby checks if there is already a same absolute path in $LOADED_FEATURES, and if there is, the file won't be loaded again.
It's easy for beginner to confuse load/require with include/extend. To some extent, these two groups of methods are similar. However, they are used under different context. include and extend are used to adding methods from a module to classes. If you include a module within a class, all the methods within that module will be added to the class as its instance methods. If you extend a module within a class, all the methods within that module will be added to the class as its class methods. See the example below,
module Mod_1
def hello1
puts "Hello from Mod_1.\n"
end
end
module Mod_2
def hello2
puts "Hello from Mod_2.\n"
end
end
class Klass
include Mod_1
extend Mod_2
def hello3
puts "Hello from Klass.\n"
end
end
a = Klass.new
a.hello1
Hello from Mod_1
=> nil
Klass.hello2
Hello from Mod_2
=> nil
a.hello3
Hello from Klass
=> nil
No comments:
Post a Comment