1.2.3

## Ruby

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

See How-To - Write Documentation

Один из способов приблизиться к пониманию Rubinius-реализации языка Ruby — это умение разобраться в том, как устроены базовые элементы самого Ruby. Смысл настоящей статьи — представить особенности Rubinius на примере понятий Ruby, которые, как ожидается, уже известны нашему читателю. В документации Rubinius мы предполагаем, что Вы знакомы либо с Ruby, либо с принципами работы компиляторов и виртуальных машин.

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

    a = 5

    def diligent(a)
      puts a * 2
    end

Здесь метод `#diligent` сообщает нам имя, по которому можно сослаться на вычисление `puts a * 2`. Однако метод также определяет замкнутый лексический контекст, область видимости, для переменной `a`. Область замкнута, поскольку `a = 5` строкой выше не имеет никакого отношения к переменной `a` в `#diligent`.

Принято считать, что в Ruby все сущности — объекты. Это не совсем так. В Ruby большинство сущностей являются объектами, тогда как некоторые вещи, исключительно важные для работы кода, вовсе не есть доступные для манипуляции объекты. Более того, какие именно из этих сущностей среды выполнения программы являются объектами Ruby, кардинально зависит от конкретной реализации. Область видимости — одна из таких сущностей.

По существу, область видимости как идея — это контекст, в котором возможны ответы на вопросы из ряда: «Каково сейчас значение `self`?» «Какие переменные сейчас локальны?» «Какое значение константа `APPLE` будет иметь вот в этой точке кода?»

Каждый из последующих элементов Ruby обсуждается с точки зрения их реализации в Rubinius и того, каким образом принцип видимости в этом участвует.

1. Скрипты
2. Методы
3. Константы
4. Классы и модули
5. Блоки и процедуры
6. Локальные переменные
7. Переменные экземпляра
8. Переменные класса
9. Глобальные переменные