这个项目包含两个gem包foo、bar,它们的lib目录都有一个hello.rb文件。
- 运行
bundle exec irb
进入irb环境 - 运行
require 'hello'
加载hello.rb文件 - 运行
Foo::Hello.new.say_hello
。输出hello from foo
,这是我们想要的结果。 - 运行
Bar::Hello.new.say_hello
。报错了,这不是我们想要的结果,为什么?
在irb运行$LOAD_PATH
可以看到自动加载目录列表包含了require_problem/gems/bar/lib
和require_problem/gems/foo/lib
。从加载顺序可以看到foo/lib
覆盖了bar/lib
,所以require 'hello'
加载的是foo/lib/hello.rb
文件
将两个gem包的hello.rb分别移到foo/lib/foo/hello.rb
及bar/lib/bar/hello.rb
,然后使用require 'foo/hello'
和require 'bar/hello'
加载对应的hello.rb文件。再次在irb里运行Foo::Hello.new.say_hello
及Bar::Hello.new.say_hello
输出了正确的结果。