Подтвердить что ты не робот

Что означает символ "$" в 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" )?

4b9b3361

Ответ 1

$: глобальная переменная, используемая для поиска внешних файлов.

От http://www.zenspider.com/Languages/Ruby/QuickRef.html#18

$: загрузить путь для скриптов и двоичных модулей путем загрузки или запроса.

Ответ 2

$ идентифицирует глобальную переменную, а не локальную переменную, переменную @instance или переменную класса @@.

Среди поставляемых по языку глобальных переменных $:, который также идентифицируется $LOAD_PATH

Ответ 3

Чтобы процитировать Ruby Forum:

ruby ​​поставляется с набором предопределенных переменных

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

если я правильно понял (не уверен на 100%), это добавляет путь lib к этому массиву путей поиска, перейдя по текущему файлу. что не совсем наилучшим образом, я бы просто начал с RAILS_ROOT (по крайней мере, для рельсов проект)

Ответ 4

$:.unshift

совпадает с

$LOAD_PATH.unshift

. Вы также можете сказать:

$: <<
$LOAD_PATH <<

Они довольно распространенные идиомы Ruby, чтобы установить путь загрузки.

Ответ 5

Я хочу отметить что-то странное в Ruby!

$ действительно означает путь загрузки. А ; означает "конец строки". Но!

$; означает разделитель полей. Попробуйте запустить $;.to_s в своем REPL, и вы увидите, что он возвращает ",". Это не все! $ с другими суффиксами может означать много других вещей.

Почему? Ну, Perl, конечно!