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

时间:2009-12-13 15:53:57

标签: ruby-on-rails 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'

有人能告诉我$ :( a.k.a。“bling”)引用了什么?

5 个答案:

答案 0 :(得分:60)

$标识全局变量,而不是局部变量,@ instance变量或@@类变量。

语言提供的全局变量中有$:,它也由$LOAD_PATH标识

答案 1 :(得分:34)

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

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

  

$:按加载或要求加载脚本和二进制模块的路径。

答案 2 :(得分:4)

引用Ruby Forum:

ruby​​带有一组预定义变量

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

如果我做对了(不是100%肯定),这会将lib路径添加到此数组中 遍历当前文件的搜索路径这不完全是 最好的方法,我只是从RAILS_ROOT开始(至少对于一个铁路 项目)

答案 3 :(得分:4)

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

$确实意味着加载路径。 ;表示“终点线”。但是!

$;表示字段分隔符。尝试在REPL中运行$;.to_s,您会看到它返回","。那不是全部! $ with other suffixes can mean many other things

为什么呢? Well, Perl of course!

答案 4 :(得分:2)

$:.unshift

相同
$LOAD_PATH.unshift

。你也可以说:

$: <<
$LOAD_PATH <<

它们是设置加载路径的常用Ruby习语。