模块混合中的#require方法

#stacklike.rb file module Stacklike def stack @stack ||= [] end ​ def add_to_stack(obj) stack.push(obj) end ​ def take_from_stack stack.pop end end ​ #stack.rb file require "stacklike" ​ class Stack include Stacklike end ​ s = Stack.new ​ s.add_to_stack("item one") s.add_to_stack("item two") s.add_to_stack("item three") ​ puts "Objects currently on the stack:" puts s.stack ​ taken = s.take_from_stack puts "Removed this object:" puts taken ​ puts "Now on stack:" puts s.stack ​ ​ ruby stack.rb => /Users/jchu773/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- stacklike.rb (LoadError) from /Users/jchu773/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require' from stack.rb:1:in `' 

大家好,我现在正在阅读David Black的Well Ground Ground Rubyist,我正在学习模块。 我正在跟随他的练习示例,但每当我使用#require方法时,弹出上述错误,任何人都知道为什么?

require_relative需要来自相对路径的文件

require文件需要您指定精确(绝对)路径

对于前 我在一个目录中有一个app.rb和一个module.rb(c:/ users / ruby​​ / app / this_app /)require_relative查找你运行的模块文件app.rb require_relative "module"查看我运行的目录app.rb(this_app /)

要求“模块(.rb)”甚至可能需要您指定我认为的完整路径和扩展名。 我不确定扩展名,但我100%确定它需要完整的绝对路径

require "/users/ruby/app/this_app/module(.rb)"

require需要一个绝对路径,但你可以使用当前目录中的require "./stacklike"require "./stacklike"require_relative使用相对于当前目录的路径,因此require_relative "stacklike"也可以工作。

一般来说,通过向Ruby加载路径添加目录来加载源文件,然后执行require "source_file" 。 Rubygems增强了require因此它可以从已安装的gem中加载文件; 这就是错误信息的原因:

rubygems/core_ext/kernel_require.rb:54:in 'require': cannot load such file -- stacklike.rb (LoadError)

来自Rubygems,它假设您正在尝试加载名为“stacklike”的gem。