#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.