В Ruby я могу сделать ссылку на смещение массива?

  1. В Ruby, может я делать что-то подобное C, как это (с моим искусственным оператором '& '):

    a = [1,2,3,4] и b = &a[2], b => [3,4], и если я установил b [0] = 99, => [1,2,-9,4]?

  2. Если элементы массива являются целыми числами, необходимый Ruby хранят их последовательно в непрерывной части памяти? Я предполагаю "нет", это только обращается, хранятся, при этом целые числа являются объектами, как все остальное в Ruby.

  3. Если ответ на № 2 - "да" (относительно которого я сомневаюсь), есть ли способ эффективно сместить блоки памяти, как можно сделать в C, например.

1
задан Cary Swoveland 12 August 2010 в 03:48
поделиться

1 ответ

В Ruby нет встроенной такой функциональности (массивы Ruby не построены из cons-ячеек, и address намного ниже уровня Ruby), хотя, честно говоря, написать что-то подобное было бы несложно.

Чтобы ответить на второй вопрос: это не обязательно будет непрерывный массив целых чисел. MRI рассматривает целые числа как непосредственные значения (с наименее значимым битом как флаг, указывающий, представляет ли слово целое число или адрес объекта), поэтому он, вероятно, сохранит его таким образом. Другие реализации делают это по-своему.

2
ответ дан 2 September 2019 в 22:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: