Привет.
Вот на дворе уже и новый 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, так как они содержат ссылку на один объект.
Всех с наступающим Рождеством.
Удачи.
Вот на дворе уже и новый 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, так как они содержат ссылку на один объект.
Всех с наступающим Рождеством.
Удачи.