четверг, 5 января 2012 г.

Передача переменных в Ruby.

Привет.
Вот на дворе уже и новый 2012 год. Поздравляю всех с этим событием. Конец СВЕТА отменили, поэтому продолжаем жить дальше и познавать что-то новое.

Для начала простой пример1.
Пусть есть 2 переменные: var1 и var2.
var1 = 'I am var1'
var2 = var1

Какие значения имеют var1 и var2?
Правильный ответ:
var1  #=>  'I am var1'
var2  #=>  'I am var1'

А теперь давайте сделаем так:
var1 = 'I am not var1'
Какие теперь значения имеют var1 и var2?

Правильный ответ:
var1  #=> 'I am not var1' 
var2  #=> 'I am var1'

У вас не возник вопрос почему?
Ответ прост: var2 никогда не была var1, а просто указывала на тот же объект, что и var1. Новым присваиванием мы изменили ссылку на объект на который указывает var1.

Теперь еще раз =)

Переменные Ruby передаются по ссылке. Для программиста, привычного к распространённым гибридным языкам программирования, некоторые эффекты такого решения могут показаться неожиданными.

Пример2:
a = "abcdefg"
b = a
b #=> "abcdefg"
a[3] = 'R'
b #=> "abcRefg"

то есть при изменении значения переменной a, неявно изменилось и значение b, так как они содержат ссылку на один объект.

Всех с наступающим Рождеством.
Удачи.

Комментариев нет:

Отправить комментарий