require './test_req.rb'
相同这一点:
require './test_req'
这
require_relative 'test_req.rb'
在Ruby中
?我一直在研究这三者之间的差异,并且似乎无法找到任何功能明智的。
require './test_req.rb'
相同这一点:
require './test_req'
这
require_relative 'test_req.rb'
在Ruby中
?我一直在研究这三者之间的差异,并且似乎无法找到任何功能明智的。
是:
require './test_req.rb'
相同这一点:
require './test_req'
号第一个将查找名为在当前工作目录test_req.rb
文件。第二个将在当前工作目录中查找实现定义的一组文件。 YARV将查找test_req.rb
,test_req.rbw
,test_req.so
,test_req.dll
和test_req.dylib
。 JRuby将查找test_req.rb
,test_req.rbw
,test_req.so
,test_req.dll
,test_req.dylib
,test_req.class
和test_req.jar
。 Rubinius将查找test_req.rb
,test_req.rbw
,test_req.so
,test_req.dll
,test_req.dylib
和test_req.rba
。 (注意:这个清单是从内存中,我没有仔细检查它。)
请注意,这两个应该从来没有被使用。当前工作目录不在脚本的控制范围之内。在最好的情况下,这可能会导致一个脆弱的脚本,它有时会根据当前工作目录在执行脚本时发生的任何错误而失败。但更糟糕的是,不仅当前工作目录不在脚本控制范围内,而是在调用者的控制之下。这意味着调用者可以通过在其控制下的某个目录中提供自己的test_req.rb
,并在调用脚本之前将该目录设置为当前工作目录,从而将任意代码注入脚本。
这就是为什么.
从Ruby 1.9中的$LOAD_PATH
中删除,这就是为什么你永远不应该使用它。
这
require_relative 'test_req.rb'
这是不等同于任何其它两个的。这将在与当前正在执行的文件相同的目录中查找名为test_req.rb
的文件,而不是当前的工作目录。
我没有看到前两个语句之间的任何区别。他们看起来一样 –
@RichardHamilton对不起,我从第二个例子中删除了扩展名,这是一个错字。 – anemaria20
Can.You不能用一些简单的测试自己回答这个问题吗? –