2010-10-28 17 views
11

我一直在試圖讓紅寶石文件需要另一個紅寶石文件,我覺得我要瘋了。我的設置是在如下紅寶石需要「沒有這樣的文件加載」的錯誤,但路徑清晰

兩個文件「/ RAID1 /紅寶石碼/基準/」

 
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) 

這是正確的文件路徑!

我已經把它切換到加載和似乎工作,我看到奇怪的行爲,但那可能就是我。有誰知道這裏會發生什麼?

回答

6

是文件CommandRunner的名稱而不是CommandRunner.rb? ruby文件的標準命名約定是使用小寫字母和下劃線,所以即使類名爲CommandRunner,該文件也會是command_runner.rb,然後需要'command_runner'才能工作。

+0

該文件的名稱是CommandRunner,我可能會改變它,因爲我不確定標準的做法是什麼,但現在這是文件的名稱。 – asm 2010-10-28 00:58:20

+3

我在文檔中找不到此特別不受支持的內容。如果將CommandRunner更改爲CommandRunner.rb,它可以工作,但我認爲它可能是eval.c中的一個錯誤,它不會找到文件CommandRunner(更糟糕的是,告訴您文件不存在)。 – 2010-10-28 02:41:12

+7

啊,我想我找到了。從http://ruby-doc.org/core/classes/Kernel.html#M005941「...否則,Ruby會嘗試將」.rb「,」.so「等添加到名稱中。 「所以這指定如果沒有給出擴展名,ruby會嘗試添加有效的擴展名,所以沒有擴展名沒有指定。換句話說,如果你想要它,沒有擴展名被認爲是不合法的。 – 2010-10-28 02:51:58

相關問題