2013-05-07 3 views
6

Я новичок в Ruby, но когда я искал документацию Ruby, я также нашел исходный код C, который был включен в документацию. Почти во всех этих ссылках я нашел VALUE, и я вполне уверен, что это struct. Но каковы атрибуты этого VALUE struct и что это на самом деле делает?Что такое тип "VALUE" в исходных файлах Ruby?

+3

Любой объект Ruby внутренне выражается в C как тип VALUE. – sawa

+1

Это деталь реализации Ruby. Как разработчик * Ruby *, вам не нужно беспокоиться об этом; основная реализация C очень мало связана с программированием в Ruby. – meagar

+1

Однако, если вы хотите использовать эти знания и иметь базовый C, все это очень доступно. Это то, как большинство из Native Extensions работают на самом деле. См. Http://media.pragprog.com/titles/ruby3/ext_ruby.pdf и/или http://guides.rubygems.org/c-extensions/ –

ответ

3

В C переменные имеют типы и данные не имеют типов. Напротив, переменные Ruby не имеют статического типа, а сами данные имеют типы, поэтому данные должны быть преобразованы между языками.

Данные в Ruby представлены C-типом «VALUE». Каждый VALUE-данные имеют тип данных.

Для получения данных C из значения, вам необходимо:

1. Определить тип данных Значение по

2. Преобразование значения в данных C

Для более подробную информацию смотрите здесь: Basic Knowledge

+0

Хорошо, теперь я понял. Каждый тип данных в Ruby имеет соответствующий тип данных в C (или, они превращаются в такие), не так ли? – Sazid

+0

@Sazid Если вы прочитаете документы, которые я связал, все будет очищено. Я верю. –

9

Вы можете увидеть определение для VALUE в файле заголовка ruby/ruby.h:

#if defined HAVE_UINTPTR_T && 0 
typedef uintptr_t VALUE; 
... 
#elif SIZEOF_LONG == SIZEOF_VOIDP 
typedef unsigned long VALUE; 
...  
#else 
# error 
#endif 

Так значение только указатель на объект. Как описано в ссылке Priti, в этом же файле есть макрос TYPE(), который может использоваться для идентификации типа данных, на которые указывает VALUE.

+1

Спасибо за указание файла заголовка :) – Sazid

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