Назад: Переменные класса Выше: Содержание Вперед: Спецификации

Глобальные переменные

This topic has missing or partial documentation. Please help us improve it.

See How-To - Write Documentation

По правилам синтаксиса имя глобальной переменной должно начинаться с $. Ожидается, что глобальные переменные доступны из любого контекста Ruby-программы. Вместе с тем, существует три разновидности глобальных переменных:истинные, тред-локальные и псевдоглобальные.

Истинные глобальные переменные связывают некоторое значение с глобально-видимым именем. Пример: $LOAD_PATH.

Тред-локальные глобальные переменные записываются в нотации глобальных, но в запущенном процессе программы каждый тред имеет свою отдельную версию переменной. Примерами тред-локальных глобалей являются $SAFE и $!. Чтобы убедиться, что их величины зависят от контекста треда, выполним следующий код:

puts $SAFE

Thread.new do
  $SAFE = 2
  puts $SAFE
end

puts $SAFE

Псевдоглобальные переменные --- это ограниченное подмножество имен, которые ссылаются не на глобальные значения, а на значения в текущей области видимости, подобно локальным переменным. Их по-прежнему называют глобальными из-за того, что их имена начинаются со значка доллара, что является источником недоразумений со стороны пользователей.

Все псевдоглобали построены на основе одной, первичной псевдоглобальной переменной: $~. Все они обеспечивают доступ к разным частям $~, и потому при изменении $~ все они также изменяются.

Другими псевдоглобалями являются $&, $</code> (обратный апостроф),$' (простой апостроф),$+и группа$1,$2,$3` и т.п.

Одна из хитростей этих величин состоит в том, что они строго привязаны к текущей области видимости, но Ruby позволяет создавать на них алиасы, как это сделано в English.rb.

Эти алиасы служат, в основном, способом добавить новые локальные переменные во все области видимости, в том числе и уже запущенные. По этой причине Rubinius не в полной мере их поддерживает. Вместо этого мы просто обеспечиваем алиасы, по умолчанию записанные в English.rb. Например, $MATCH можно использовать вместо $~ как при включенном English.rb, так и без него.

Назад: Переменные класса Выше: Содержание Вперед: Спецификации

Tweet at @rubinius on Twitter or email community@rubini.us. Please report Rubinius issues to our issue tracker.