Ruby: различия между версиями

10 байт убрано ,  13 лет назад
{{Внимание|Если состояние объектов-ключей изменилось, то хешу необходимо вызвать метод <code>.rehash</code>.}}
 
<code>massiv_1massiv1 = [ "а", "б" ]
massiv_2massiv2 = [ "в", "г" ]
xew = { massiv_1massiv1 => 100, massiv_2massiv2 => 300 }
xew[ massiv_1massiv1 ] #-> 100
massiv_1massiv1[0] = "я"
xew[ massiv_1massiv1 ] #-> nil
xew<u>.rehash</u> #-> {["я", "б"]=>100, ["в", "г"]=>300}
xew[ massiv_1massiv1 ] #-> 100</code>
 
В данном примере ключами хеша (<code>xew</code>) являются два массива (<code>massiv_1massiv1</code> и <code>massiv_2massiv2</code>). Одному из них (<code>massiv_1</code>) мы изменили нулевой элемент (с "а" на "я"). После этого доступ к значению был потерян. После выполнения метода <code>.rehash</code> все встало на свои места.
 
{{info|''Как Руби отслеживает изменение ключа в ассоциативном массиве? Очень просто: с помощью метода <code>.hash</code>, который генерирует "контрольную сумму" обьекта в виде целого числа. Например: <code>[1,2,3].hash #-> 25</code>''}}
Анонимный участник