1

我有一个像这样的文件结构

root
|--lib
   |--root.rb
   |--extensions
      |--strings.rb

我希望能够使用文件中string.rb的方法root.rb

所以我require 'extensions/strings'在文件顶部添加了root.rb

但我得到LoadError: cannot load such file -- extensions/strings.rb错误。

我该如何避免这种情况?

4

4 回答 4

2

您可以尝试以下方法:

require File.dirname(__FILE__) + "/extensions/strings"
于 2013-04-06T20:29:19.460 回答
2

如果您使用的是 Ruby 1.9 或更高版本,请使用 require_relative。在 root.rb 中,写入:

require_relative 'extensions/strings.rb'
于 2013-04-06T20:32:04.053 回答
1

我在这里找到了我正在寻找的答案。

我使用了jandot的解决方案。

Dir[File.dirname(__FILE__) + '/extensions/*.rb'].each {|file| require file }


经过一些测试后编辑,

出于某种原因,这不会引发任何错误消息,但它似乎并没有加载实际的 Ruby 文件。

我尝试将其添加到 extensions/strings.rb

class Dog
  def self.bark
    puts "bark"
  end
end

并在irb上运行它。

1.9.3-p0 :001 > require 'rhapsody'
 => true 
1.9.3-p0 :002 > Dog
NameError: uninitialized constant Dog
    from (irb):2
    from /Users/jasonkim/.rvm/rubies/ruby-1.9.3-p0/bin/irb:16:in `<main>'

因此,由于某种原因,它没有在 extensions/strings.rb 中找到 Dog 类。


阅读 ruby​​gems.org 中的指南后进行编辑

当我开始 irb 时,我不得不去irb -Ilib -rextensions

指南这样解释情况

我们需要在这里使用一个奇怪的命令行标志:-Ilib。通常 RubyGems 会为您包含 lib 目录,因此最终用户无需担心配置其加载路径。但是,如果您在 RubyGems 之外运行代码,则必须自己进行配置。

于 2013-04-06T20:13:31.267 回答
0
require_relative '../lib/extensions/strings'

为我工作。

于 2014-01-20T21:14:30.767 回答