Ruby在路径中明确要求"没有这样的文件加载"错误

asm*_*asm 11 ruby scripting require load-path

我一直试图得到一个ruby文件,需要另一个ruby文件,我觉得我疯了.我的设置如下

'/ raid1/ruby​​-code/benchmark /'中的两个文件

CommandRunner
Benchmarker

Benchmarker是目前的主要程序,并且想要CommandRunner,我尝试了很多不同的东西,但没有一个能够工作.以下列出了我在Benchmarker开头所提出的所有内容

require 'CommandRunner'
require './CommandRunner'
$LOAD_PATH.unshift File.expand_path(File.dirname($PROGRAM_NAME))
require 'CommandRunner'
$LOAD_PATH.unshift File.expand_path(File.dirname($PROGRAM_NAME))
require './CommandRunner'

我也使用require_relative尝试了所有上述排列.我已经尝试过将文件加载到emacs内的irb中,我已经在命令行中尝试过了.在irb中的某一点,它会加载一次

require 'CommandRunner'
然后加载,直到我将其切换回'./CommandRunner',然后再次加载.

我实际上有错误说

`require_relative': no such file to load -- 
/raid1/ruby-code/benchmark/CommandRunner (LoadError)

这是文件的正确路径!

我已经把它切换到加载,这似乎是有效的,我看到奇怪的行为,但这可能是我.有谁知道这里会发生什么?

Ben*_*aum 6

是CommandRunner文件的名称而不是CommandRunner.rb?ruby文件的标准命名约定是使用小写和下划线,所以即使类名是CommandRunner,文件也是command_runner.rb,然后要求'command_runner'应该工作.

  • 啊,我想我找到了.来自http://ruby-doc.org/core/classes/Kernel.html#M005941"......否则,Ruby会尝试在名称中添加".rb",".so"等等. " 因此,这指定如果没有给出扩展名,ruby将尝试添加有效的扩展名,因此未指定扩展名.换句话说,如果您想要延期,则不认为任何延期有效. (7认同)
  • 我在文档中找不到这个特别不支持的内容.如果你将CommandRunner更改为CommandRunner.rb,它会工作,但我认为它可能是eval.c中的一个错误,它找不到文件CommandRunner(更糟糕的是,告诉你该文件不存在). (3认同)