Главная » Статьи » Ruby » Ruby. Краткий экскурс.

Переменные
Переменные

Переменные используются, чтобы сохранить промежуточный результат вычислений. Имя переменной в Ruby должно:
начинаться с буквы или знака подчёркивания;
состоять из латинских букв, цифр и знака подчёркивания.

Примеры переменных:
array
variable
another_variable
3element # неправильное имя. Начинается с цифры
_3element # а вот как можно
__ # немного странное, но корректное имя переменной


Переменная может иметь имя не только латинское, но и русское. Для этого, правда, требуется, чтобы весь текст программы был написан в кодировке UTF-8, а интерпретатор запускался с параметром -KU.

Присваивание делается знаком равенства (=), вот так:
array = [1, 2, 3, 4]
variable = array + [1, 2]
another_variable = variable - array


То, что справа от =, прежде чем стать значением переменной, обычно полностью вычисляется. Наша переменная variable будет содержать массив [1, 2, 3, 4, 1, 2], ибо именно таков результат действия array + [1, 2]. Плюс (+) с массивами поступает именно так: прицепляет второй массив в хвост первого.

Переменные указывают на объект

Фокус-покус:
girlfriend = "Даша"
goes_on_a_visit = girlfriend
puts girlfriend #=> "Даша", разумеется
goes_on_a_visit[0] = "М" # меняем первую (номер ноль) букву у переменной-строки
puts girlfriend #=> "Маша"
# На первый взгляд странно и неожиданно


Значение, возвращаемое первой переменной, изменилось потому, что в Ruby переменные содержат лишь ссылку на то, что вы им присваиваете.

Сами данные (объект) лежат где-то в другом месте. Ввиду этого естественно, что при прямом изменении самого объекта, на который указывает переменная, все другие переменные, указывающие на этот объект, будут возвращать изменённое значение (также будут изменяться).

Чтобы girlfriend наша осталась "Даша", надо в переменную занести её клон:
girlfriend = "Даша"
goes_on_a_visit = girlfriend.clone
goes_on_a_visit[0] = "М" # Но изменили мы лишь клон. Дома в сохранности сидит настоящая:
puts girlfriend #=> "Даша"


Можно создавать копии объектов ещё методом .dup. Разница между ними будет понятна потом.

Для безвредного присваивания новых значений переменным их редко приходится клонировать, ибо большинство методов делают это и так. Даже если вы просто присвоите переменной новое значение, Ruby создаст объект с новым значением и поместит в (уже существующую) переменную ссылку на тот объект:
# …
goes_on_a_visit = "Аристарх" # Создаётся новый объект, переменная переводится на него
p girlfriend #=> "Даша"


Категория: Ruby. Краткий экскурс. | Добавил: Kostya (10.05.2009)
Просмотров: 1471 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]