2009-12-13 201 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