Ruby on rails 什么是';$:。unshift File.dirname(uuu File_uuuu)和#x27;做什么?

Ruby on rails 什么是';$:。unshift File.dirname(uuu File_uuuu)和#x27;做什么?,ruby-on-rails,ruby,Ruby On Rails,Ruby,下面的内容在做什么,为什么会出现在页面的顶部 $:.unshift File.dirname(__FILE__) 它正在将当前文件的目录添加到加载路径$:表示加载路径(它是一个数组)并且unshift在数组的开头加上前缀 它在那里(并且位于顶部)的原因是,所有这些要求都不必担心路径。从技术上讲,它是添加文件的路径,作为ruby用于查找文件的加载路径的第一个条目。$:是一个神奇的变量,由$LOAD_PATH更清晰地引用 ruby-1.9.2-p136 > $LOAD_PATH =>

下面的内容在做什么,为什么会出现在页面的顶部

$:.unshift File.dirname(__FILE__)

它正在将当前文件的目录添加到加载路径
$:
表示加载路径(它是一个数组)并且
unshift
在数组的开头加上前缀


它在那里(并且位于顶部)的原因是,所有这些要求都不必担心路径。

从技术上讲,它是添加文件的路径,作为ruby用于查找文件的加载路径的第一个条目。$:是一个神奇的变量,由$LOAD_PATH更清晰地引用

ruby-1.9.2-p136 > $LOAD_PATH
 => ["/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.6.0", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.6.0", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/x86_64-darwin10.6.0"] 
ruby-1.9.2-p136 > $:
 => ["/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.6.0", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.6.0", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/x86_64-darwin10.6.0"] 
ruby-1.9.2-p136 > $:.unshift '.'
 => [".", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.6.0", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.6.0", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/x86_64-darwin10.6.0"] 

它将当前工作目录路径添加到项目中使用的所有require中,在顶部添加此路径后,我们不需要担心我们需要的文件路径,但是我们需要的所有文件必须位于主程序需要其他文件的同一目录中


$:是用于加载路径的保留关键字。

+1表示同情,因为它遇到了最丑陋的Ruby位之一。相关问题:我知道这是一个非常古老的问题,但是有没有理由把它添加到头部而不是尾部(比如说推)?这是否意味着它以类似于并集的方式优先于具有相同名称的文件?(修补程序文件夹)。@mckenzm是的。将其添加到头部是因为希望首先在加载路径中查找当前目录中的文件。在查找文件时,加载路径是按从头到尾的顺序遍历的。这就是我的目的,因此对于开发,单元测试目录优先于集成测试目录等。感谢您的回答。在加载路径中添加内容的好处/意义是什么?可以使用
require
访问ruby文件,对吗?