Какой эквивалент в Ruby функции Delphi SizeOf?

#ruby-on-rails #ruby #delphi

#ruby-on-rails #ruby #delphi

Вопрос:

Я хочу получить количество байтов, занимаемых переменной или типом в Ruby. Существует ли эквивалент SizeOf функции в Ruby on Rails?

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

1. Эквивалентна чему? Я предполагаю, что C.

2. Заканчивается виртуальная память? 🙂

3. Это для целей отладки или как? В Ruby такого метода нет, поэтому, сообщив нам, чего вы хотите достичь, вы могли бы помочь людям предложить способ сделать это.

4. Я использую SizeOf в Delphi для получения количества байтов в переменной, я также хочу сделать это в своем приложении ruby. Спасибо.

5. Мне действительно любопытно узнать, зачем вам нужно это сделать?

Ответ №1:

Как вы видите из комментариев, в Ruby такого метода нет. Поскольку вы не можете напрямую управлять памятью в Ruby и нет явных «простых» типов (все является объектом), а также из-за динамической природы Ruby, этот метод в любом случае был бы не очень полезен.

Для Strin& класса существует своего рода исключение. Поскольку в Ruby строка представляет собой последовательность байтов, Strin&#size будет возвращен размер данных в строке.

Этого должно быть достаточно для практических целей, но дело не в количестве байтов в памяти — строковый объект будет иметь другие внутренние переменные в дополнение к самим данным.

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

Ответ №2:

Если вы пытаетесь сделать вещи совместимыми с вашим кодом Delphi, то поиск размеров Ruby вам вообще не поможет. Вам нужно использовать размеры Delphi в вашем коде Ruby. Поскольку Delphi статически типизирован, SizeOf это действительно удобно — просто создайте таблицу типов Delphi и соответствующих размеров. Если у вас есть массив, умножьте значение из таблицы на количество элементов.

Ответ №3:

Скалярные типы определены в ruby.c. Я не знаю способа узнать их ширину из Ruby.

Добавлено:

Вы могли бы написать программу на C, которая использует ruby.c для определения скалярных размеров. Затем вызовите вашу программу на C из вашего Ruby sw.