2010-11-24 56 views
0

我是新來的Ruby我想不通的要求紅寶石

MakModule.rb

module Display 
    class Multiply 
    def Multiply.mul(first, second) 
     return first * second 
    end 
    end 
end 

MakRequire1.rb

require "Display" 
puts Multiply.mul 5,6 

MakRequire2.rb

require "MakModule.rb" 
puts Multiply.mul 5,6 

這兩個文件都給我錯誤

ruby: No such file or directory -- makRequire (LoadError) 

我該如何更正我的代碼?

+1

您可以先發布產生錯誤的* actual *代碼,因爲您在此處發佈的代碼絕對不可能產生該錯誤消息。 – 2010-11-24 14:46:52

+0

此外,您使用的是哪個版本的Ruby,因爲這有所不同。 – 2010-11-24 20:14:10

回答

4

您在此處發佈的代碼生成該錯誤消息根本不可能。錯誤消息表明您嘗試使用名爲makRequire的文件require,但該文件名不會顯示在您發佈的代碼中的任何位置。

沒有產生實際錯誤的實際代碼,這是不可能回答你的問題。但是,這裏有一些一般性的提示:

每當計算機告訴你它找不到東西,在99%的情況下,問題是計算機告訴它無法找到的東西實際上並不存在。

因此,在這種情況下,計算機會告訴您無法找到名爲makRequire.rb的文件,最可能的解釋是makRequire.rb實際上並不存在。所以,你需要檢查的第一件事是:確實makRequire.rb(注意大小寫和文件擴展名)實際存在嗎?因爲如果它不存在,那麼計算機找不到它的原因應該是相當明顯的。

在的情況下,其餘的99%,問題是,電腦正在尋找的東西確實存在,但計算機找錯了地方。因此,在您確認makRequire.rb實際上存在後,您需要確保文件所在的目錄位於Ruby的$LOAD_PATH中,如果不存在,則需要將該目錄添加到Ruby的$LOAD_PATH。或者,如果您想require文件相對於正在執行要求的文件的路徑,則需要使用require_relative而不是require

第三件要檢查的是,擁有ruby進程的用戶是否具有足夠的權限來訪問文件makRequire.rb,它所在的目錄及其所有父目錄。

0
require 'MakModule' 
+0

OP已經這樣做了。 [`require`](http://ruby-doc.org/core/classes/Kernel.html#M005941)允許使用擴展名,或者如果沒有提供擴展名將爲擴展名提供幾個不同的值。 – 2010-11-24 20:12:26

4

試試這個,

require File.join(File.dirname(__FILE__),'MarkModule') 
+0

完美地工作 – 2013-02-04 05:46:29

0

您可以要求一個文件,是在同一個目錄。要使用模塊,通常需要在類定義中使用include模塊。所以你永遠不需要Display,你需要包含Display(通常不帶.rb擴展名)的文件。

+0

我認爲在1.9中,「需要」需要一個絕對路徑。 – Brian 2010-11-24 14:50:04

+0

我運行1.9。它不需要絕對路徑...我總是可以只需要'require'文件名'需要文件' – philosodad 2010-11-25 03:31:01

1

嘗試require './MakModule',因爲.是當前目錄。