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当然!