5

和有什么区别

require 'blahblahlblah.rb'

对比

require './blahblah.rb'

对比

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

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

谢谢!

4

1 回答 1

5
  • require blaba.rb正在搜索您的默认 gem 路径以加载文件,这取决于您使用的 ruby​​ 版本。例如,RVM 将在系统范围内搜索,$HOME/.rvm/rubies/...而系统范围的 ruby​​ 将在分发的默认路径中搜索。请注意,这是 gem 所在的位置,但您可以手动添加一个库,例如mylibrary.rb在同一路径中并在您的任何程序中使用它。然而,这是一件很糟糕的事情,创建 gem 并将它们安装到系统中是一个更简洁的过程。

  • require ./blabla.rb加载位于您的工作目录中的文件。您可以添加完整路径,例如require /home/username/library/myproject/models/sample.rb. 它的工作原理几乎相同。在类 UNIX 世界中,./符号表示当前目录。该解决方案通常用于irb将 Rails 模型加载users.rbirbpry使用它。给你一个 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.

希望这能澄清一点情况。

于 2013-10-29T18:38:30.213 回答