2010-11-24 94 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',因为.是当前目录。