我有一个像这样的文件结构
root
|--lib
|--root.rb
|--extensions
|--strings.rb
我希望能够使用文件中string.rb
的方法root.rb
。
所以我require 'extensions/strings'
在文件顶部添加了root.rb
。
但我得到LoadError: cannot load such file -- extensions/strings.rb
错误。
我该如何避免这种情况?
我有一个像这样的文件结构
root
|--lib
|--root.rb
|--extensions
|--strings.rb
我希望能够使用文件中string.rb
的方法root.rb
。
所以我require 'extensions/strings'
在文件顶部添加了root.rb
。
但我得到LoadError: cannot load such file -- extensions/strings.rb
错误。
我该如何避免这种情况?
您可以尝试以下方法:
require File.dirname(__FILE__) + "/extensions/strings"
如果您使用的是 Ruby 1.9 或更高版本,请使用 require_relative。在 root.rb 中,写入:
require_relative 'extensions/strings.rb'
我使用了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 类。
阅读 rubygems.org 中的指南后进行编辑
当我开始 irb 时,我不得不去irb -Ilib -rextensions
指南这样解释情况
我们需要在这里使用一个奇怪的命令行标志:-Ilib。通常 RubyGems 会为您包含 lib 目录,因此最终用户无需担心配置其加载路径。但是,如果您在 RubyGems 之外运行代码,则必须自己进行配置。
require_relative '../lib/extensions/strings'
为我工作。