Ответ 1
$: глобальная переменная, используемая для поиска внешних файлов.
От http://www.zenspider.com/Languages/Ruby/QuickRef.html#18
$: загрузить путь для скриптов и двоичных модулей путем загрузки или запроса.
Некоторое время играла с 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" )?
$: глобальная переменная, используемая для поиска внешних файлов.
От http://www.zenspider.com/Languages/Ruby/QuickRef.html#18
$: загрузить путь для скриптов и двоичных модулей путем загрузки или запроса.
$
идентифицирует глобальную переменную, а не локальную переменную, переменную @instance или переменную класса @@.
Среди поставляемых по языку глобальных переменных $:
, который также идентифицируется $LOAD_PATH
Чтобы процитировать Ruby Forum:
ruby поставляется с набором предопределенных переменных
$: = default search path (array of paths)
__FILE__ = current sourcefile
если я правильно понял (не уверен на 100%), это добавляет путь lib к этому массиву путей поиска, перейдя по текущему файлу. что не совсем наилучшим образом, я бы просто начал с RAILS_ROOT (по крайней мере, для рельсов проект)
$:.unshift
совпадает с
$LOAD_PATH.unshift
. Вы также можете сказать:
$: <<
$LOAD_PATH <<
Они довольно распространенные идиомы Ruby, чтобы установить путь загрузки.
Я хочу отметить что-то странное в Ruby!
$
действительно означает путь загрузки. А ;
означает "конец строки". Но!
$;
означает разделитель полей. Попробуйте запустить $;.to_s
в своем REPL, и вы увидите, что он возвращает ","
. Это не все! $
с другими суффиксами может означать много других вещей.
Почему? Ну, Perl, конечно!