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