Ruby中的“$”字符是什么意思?

一直在玩Ruby on Rails一段时间,并决定看看实际的来源。 从GitHub抓取回购,并开始环顾四周。 遇到一些代码,我不知道它是什么或它引用。

我在actionmailer / test / abstract_unit.rb中看到了这段代码

root = File.expand_path('../../..', __FILE__) begin require "#{root}/vendor/gems/environment" rescue LoadError $:.unshift("#{root}/activesupport/lib") $:.unshift("#{root}/actionpack/lib") end lib = File.expand_path("#{File.dirname(__FILE__)}/../lib") $:.unshift(lib) unless $:.include?('lib') || $:.include?(lib) require 'rubygems' require 'test/unit' require 'action_mailer' require 'action_mailer/test_case' 

有人能告诉我什么$:(又名“金光闪闪”)引用?

$:是用于查找外部文件的全局variables。

http://www.zenspider.com/Languages/Ruby/QuickRef.html#18

$:通过加载或要求加载脚本和二进制模块的path。

$标识一个全局variables,而不是局部variables@instancevariables或@@类variables。

在语言提供的全局variables中有$LOAD_PATH它也由$LOAD_PATH标识

引用Ruby论坛:

ruby带有一组预定义的variables

 $: = default search path (array of paths) __FILE__ = current sourcefile 

如果我得到它的权利(不是100%肯定),这通过检索当前文件添加到这个searchpath数组的libpath。 这不是最好的方法,我只是从RAILS_ROOT开始(至less对于rails项目)

 $:.unshift 

是相同的

 $LOAD_PATH.unshift 

。 你也可以说:

 $: << $LOAD_PATH << 

他们是很常见的Ruby成语来设置加载path。

我想注意Ruby的一些奇怪的事情!

$确实意味着加载path。 而且; 意味着“终点线”。 但!

$; 指字段分隔符。 尝试在你的REPL中运行$;.to_s ,你会看到它返回"," 。 那不是全部! $与其他后缀可能意味着许多其他的事情 。

为什么? 那么,Perl当然!