ruby和nor irb都不能在当前目录中加载.rb文件

Bad*_*est 29 ruby import irb require ruby-1.9.2

我在Ruby中导入文件时遇到了麻烦.我在Windows XP中制作一个Ruby应用程序.该应用程序的所有类文件都在"C:/Documents/Prgm/Surveyor_Ruby/lib".但是当我require在另一个文件中的文件时,ruby和irb都无法找到所需的文件.

当前目录的内容:

C:\Documents\Prgm\Surveyor_Ruby\lib>dir
 Volume in drive C has no label.
 Volume Serial Number is AAAA-BBBB

 Directory of C:\Documents\Prgm\Surveyor_Ruby\lib

10/09/2010  06:32 PM    <DIR>          .
10/09/2010  06:32 PM    <DIR>          ..
10/08/2010  03:22 PM             5,462 main (commented).rb
10/08/2010  03:41 PM                92 question.rb
10/08/2010  09:06 PM             2,809 survey.rb
10/09/2010  06:25 PM               661 surveyor.rb
10/08/2010  01:39 PM             1,546 test.rb
               5 File(s)         10,570 bytes
               2 Dir(s)  40,255,045,632 bytes free
Run Code Online (Sandbox Code Playgroud)

确认irb在正确的目录中:

C:\Documents\Prgm\Surveyor_Ruby\lib>irb
irb(main):001:0> Dir.pwd
=> "C:/Documents/Prgm/Surveyor_Ruby/lib"
Run Code Online (Sandbox Code Playgroud)

...但是irb无法加载survey.rb:

irb(main):002:0> require 'survey'
LoadError: no such file to load -- survey
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from (irb):2
        from C:/Ruby192/bin/irb:12:in `<main>'
Run Code Online (Sandbox Code Playgroud)

Adr*_*ari 63

这些都不适合我,但这样做:

irb -I .
>require 'file'
 => true
Run Code Online (Sandbox Code Playgroud)


nur*_*tin 11

require './hede'
Run Code Online (Sandbox Code Playgroud)

要么

require_relative 'hede'
Run Code Online (Sandbox Code Playgroud)

这适用于Linux上的Ruby(1.9.3)和JRuby(1.7.x).我没有在Windows上测试它.


小智 9

注意到相同的行为,但我的linux根源让我尝试:.\file.rb它加载到irb.尝试显式声明当前目录.


Dar*_*rme 8

这个命令怎么样?写的有点麻烦,但真的很干净,应该总是有效:

? $ irb
> require "#{Dir.pwd}/file_to_load.rb"
=> true 


小智 2

我相信前面的两篇文章都是正确的,只是用途不同。在 IRB 中,使用带有 的绝对路径require,对于文件,您也可以使用require绝对路径,或者使用require_relative.