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