2009-12-13 216 views
50

一直在玩Ruby on Rails,并决定看看实际的源代码。从GitHub抓回购,并开始环顾四周。遇到一些代码,我不确定它做了什么或它引用了什么。

我看到的ActionMailer /测试这种代码/ 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' 

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

回答

4

引述Ruby Forum:

红宝石附带了一组预定义变量

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

的,如果我得到它的权利(不是100%肯定),这增加的lib路径,这个阵列 通过查看当前文件搜索路径。这是不完全的 最好的方法,我会简单地用RAILS_ROOT开始(至少在轨 项目)

2
$:.unshift 

相同

$LOAD_PATH.unshift 

。你也可以这样说:

$: << 
$LOAD_PATH << 

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

54

$标识一个全局变量,与局部变量@instance变量或@@ class变量相反。

在这些语言提供的全局变量$:,这也是由$LOAD_PATH

1

我想指出一点古怪关于Ruby鉴定!

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

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

为什么? Well, Perl of course!

+0

谢谢,这就是我正在寻找的,即使用$定义字段分隔符之间的许多其他事情。 – user1175135 2018-02-10 15:52:31

相关问题