В Ruby я могу сделать ссылку на смещение массива?
В Ruby я могу сделать что-то в стиле C, например, (с моим оператором грима '&'):
a = [1,2,3,4] и b = &a[2], b => [3,4], и если я установлю b[0] = 99, a => [1,2,-9,4]?
Если элементы массива являются целыми числами, необходимо ли Ruby хранить их последовательно в непрерывной части памяти? Я предполагаю "нет", что хранятся только адреса, целые числа являются объектами, как и все остальное в Ruby.
Если ответом на вопрос № 2 является "да" (в чем я сомневаюсь), есть ли способ эффективно сместить блоки памяти, как, например, в Си.
1 ответ
В Ruby нет такой функциональности (массивы Ruby не состоят из cons-ячеек, и получение адреса гораздо ниже, чем работает в Ruby), хотя, честно говоря, было бы нетрудно написать что-то подобное.
Чтобы ответить на второй вопрос: это не обязательно будет непрерывный массив целых чисел. MRI рассматривает целые числа как непосредственные значения (с наименьшим значащим битом в качестве флага, указывающего, представляет ли слово целое число или адрес объекта), поэтому оно, вероятно, сохранит его таким образом. Другие реализации делают это по-своему.