ruby需要'./blahblah.rb'vs需要File.expand_path('../ blahblah',__ FILE__)

时间:2013-10-29 18:24:22

标签: ruby

之间有什么区别
require 'blahblahlblah.rb'

VS

require './blahblah.rb'

vs

require File.expand_path('../blahblah', __FILE__)

我看到他们都被使用了。想知道什么更好,在什么情况下比另一个好。

谢谢!

1 个答案:

答案 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加载到irbpry并使用它。为了给你一个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

希望这能澄清一下情况。

相关问题