2013-05-07 11 views
6

Jestem całkiem nowy dla Ruby, ale kiedy przeszukiwałem dokumentację Ruby, znalazłem też kod źródłowy C, który został zawarty w dokumentacji. W prawie wszystkich tych odniesieniach znalazłem VALUE i jestem pewien, że jest to struct. Ale jakie są atrybuty tego VALUE struct i co to właściwie robi?Co to jest typ "VALUE" w źródłowych plikach Ruby?

+3

Dowolny obiekt Ruby jest wewnętrznie wyrażany w C jako typ "WARTOŚĆ". – sawa

+1

To jest szczegół implementacji Rubiego. Jako programista * Ruby * nie musisz się tym martwić; podstawowa implementacja C ma bardzo niewiele wspólnego z programowaniem w Ruby. – meagar

+1

Jeśli jednak chcesz korzystać z tej wiedzy i masz podstawowe C, wszystko jest bardzo dostępne. Tak naprawdę działa większość Natywnych rozszerzeń. Zobacz http://media.pragprog.com/titles/ruby3/ext_ruby.pdf i/lub http://guides.rubygems.org/c-extensions/ –

Odpowiedz

3

W języku C zmienne mają typy, a dane nie mają typów. Natomiast zmienne Ruby nie mają typu statycznego, a same dane mają typy, więc dane będą musiały być konwertowane między językami.

Dane w języku Ruby są reprezentowane przez typ C "WARTOŚĆ". Każde dane VALUE ma swój typ danych.

do pobierania danych C wartość, trzeba:

1. Określić typ danych wartości za

2. Konwersja wartości do danych C

Dla więcej informacji szukaj tutaj: Basic Knowledge

+0

Ok, więc teraz rozumiem. Każdy typ danych w Ruby ma odpowiedni typ danych w C (lub, są one przekształcane w takie), czyż nie? – Sazid

+0

@Sidid Jeśli czytasz dokumenty, które łączyłem, wszystko zostanie usunięte. Wierzę. –

9

Możesz zobaczyć definicję dla VALUE w pliku nagłówkowym 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 

więc wartość jest tylko wskaźnik do obiektu. Jak opisano w łączu Priti, w tym samym pliku znajduje się makro TYPE(), które można wykorzystać do identyfikacji typu danych wskazywanych przez VALUE.

+1

Dzięki za wskazanie pliku nagłówkowego :) – Sazid