2010-06-30 4 views
2

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

+0

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

+0

Запуск виртуальной памяти? :-) –

+0

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

ответ

1

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

Добавлено:

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

+0

Я не знаю, как это сделать :( – Jett

2

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

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

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

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

2

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

Смежные вопросы