【问题标题】:The #require method in modules mix-ins模块混合中的#require 方法
【发布时间】:2016-04-13 22:57:23
【问题描述】:
#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 `<main>'

大家好,我现在正在阅读 David Black 的 Well Grounded Rubyist,我目前正在学习模块。我按照他的练习示例进行操作,但是每当我使用#require方法时,就会弹出上述错误,有人知道为什么吗?

【问题讨论】:

  • require 改为require_relative 是否有效?如果是这样,并且您想知道有什么区别,this SO Q&A 是一个很好的资源。

标签: ruby-on-rails ruby


【解决方案1】:

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

要求文件需要你指定确切(绝对)路径

例如。 我在一个目录中有一个 app.rb 和一个 module.rb (c:/users/ruby/app/this_app/) require_relative 查找您运行 app.rb 的模块文件 require_relative "module" 查看我运行 app.rb(this_app/) 的目录

require "module(.rb)" 甚至可能需要您指定我相信的完整路径和扩展名。我不确定扩展名,但我 100% 确定它需要完整的绝对路径

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

【讨论】:

    【解决方案2】:

    require 需要一个绝对路径,但您可以使用当前目录中的 require 和 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。

    【讨论】:

      猜你喜欢
      • 2020-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 2019-07-01
      • 1970-01-01
      相关资源
      最近更新 更多