之间有什么区别
require 'blahblahlblah.rb'
VS
require './blahblah.rb'
vs
require File.expand_path('../blahblah', __FILE__)
我看到他们都被使用了。想知道什么更好,在什么情况下比另一个好。
谢谢!
答案 0 :(得分:5)
require blaba.rb
正在搜索您的默认gem路径以加载该文件,这取决于您使用的ruby版本。例如,RVM将在$HOME/.rvm/rubies/...
中搜索,而系统范围的ruby将搜索分发的默认路径。请注意,这是宝石所在的位置,但您可以在同一路径中手动添加库mylibrary.rb
,并在任何程序中使用它。但是,这是一件非常糟糕的事情,创建宝石并将其安装到您的系统中是一个更简洁的过程。
require ./blabla.rb
加载位于工作目录中的文件。您可以添加require /home/username/library/myproject/models/sample.rb
之类的完整路径。它的工作方式大致相同。在类UNIX的世界中,./
符号表示当前目录。此解决方案通常在irb
中使用,以便将导轨模型users.rb
加载到irb
或pry
并使用它。为了给你一个shell环境中的例子(如果你熟悉UNIX shell,你会发现它):
GreyJewel ~ » ls myports.txt
myports.txt
GreyJewel ~ » ls ./myports.txt
./myports.txt
在程序中使用了第三个解决方案require File.expand_path('../sample.rb', __FILE__)
,因为它明确地创建了一个完整路径,使用该行所持文件所在的目录作为锚点,这是一个与require ./sample.rb
相比,更安全的方法。请注意,加载ruby文件时,可以省略文件扩展名.rb
。
希望这能澄清一下情况。