2010-09-24 6 views
8

रूबी में 1.9 (YARV) तुम इतनी तरह सभी वर्तमान में आवंटित वस्तुओं की एक संख्या प्राप्त कर सकते हैं:ऑब्जेक्टस्पेस.count_objects को कॉल करते समय हैश कुंजी का क्या अर्थ है?

ObjectSpace.count_objects 

जो की तरह

{:TOTAL=>1226560, :FREE=>244204, :T_OBJECT=>26141, :T_CLASS=>9819, :T_MODULE=>1420, :T_FLOAT=>287, 
:T_STRING=>260476, :T_REGEXP=>4081, :T_ARRAY=>72269, :T_HASH=>14923, :T_STRUCT=>4601, :T_BIGNUM=>7, 
:T_FILE=>16, :T_DATA=>54553, :T_MATCH=>5, :T_COMPLEX=>1, :T_RATIONAL=>15, :T_NODE=>524818, 
:T_ICLASS=>8924} 

इन हैश कुंजी का अर्थ क्या है एक हैश रिटर्न? कुछ T_STRING और T_FILE जैसे स्पष्ट हैं। मैं विशेष रूप से उत्सुक हूं: मुफ़्त,: T_ICLASS,: T_DATA, और: T_NODE।

उत्तर

4

बस एक अनुमान: मुझे लगता है :T_ICLASS मायने रखता है कक्षाएं और :T_NODE शामिल हो सकता है एएसटी नोड्स के लिए खड़े हो सकता है।

यहाँ एक पूरी सूची (दुर्भाग्य से टिप्पणियों के बिना) है:

#define T_NONE RUBY_T_NONE 
#define T_NIL RUBY_T_NIL 
#define T_OBJECT RUBY_T_OBJECT 
#define T_CLASS RUBY_T_CLASS 
#define T_ICLASS RUBY_T_ICLASS 
#define T_MODULE RUBY_T_MODULE 
#define T_FLOAT RUBY_T_FLOAT 
#define T_STRING RUBY_T_STRING 
#define T_REGEXP RUBY_T_REGEXP 
#define T_ARRAY RUBY_T_ARRAY 
#define T_HASH RUBY_T_HASH 
#define T_STRUCT RUBY_T_STRUCT 
#define T_BIGNUM RUBY_T_BIGNUM 
#define T_FILE RUBY_T_FILE 
#define T_FIXNUM RUBY_T_FIXNUM 
#define T_TRUE RUBY_T_TRUE 
#define T_FALSE RUBY_T_FALSE 
#define T_DATA RUBY_T_DATA 
#define T_MATCH RUBY_T_MATCH 
#define T_SYMBOL RUBY_T_SYMBOL 
#define T_RATIONAL RUBY_T_RATIONAL 
#define T_COMPLEX RUBY_T_COMPLEX 
#define T_UNDEF RUBY_T_UNDEF 
#define T_NODE RUBY_T_NODE 
#define T_ZOMBIE RUBY_T_ZOMBIE 
#define T_MASK RUBY_T_MASK 

RUBY_T_xyz enum इस तरह परिभाषित किया गया है:

enum ruby_value_type { 
    RUBY_T_NONE = 0x00, 

    RUBY_T_OBJECT = 0x01, 
    RUBY_T_CLASS = 0x02, 
    RUBY_T_MODULE = 0x03, 
    RUBY_T_FLOAT = 0x04, 
    RUBY_T_STRING = 0x05, 
    RUBY_T_REGEXP = 0x06, 
    RUBY_T_ARRAY = 0x07, 
    RUBY_T_HASH = 0x08, 
    RUBY_T_STRUCT = 0x09, 
    RUBY_T_BIGNUM = 0x0a, 
    RUBY_T_FILE = 0x0b, 
    RUBY_T_DATA = 0x0c, 
    RUBY_T_MATCH = 0x0d, 
    RUBY_T_COMPLEX = 0x0e, 
    RUBY_T_RATIONAL = 0x0f, 

    RUBY_T_NIL = 0x11, 
    RUBY_T_TRUE = 0x12, 
    RUBY_T_FALSE = 0x13, 
    RUBY_T_SYMBOL = 0x14, 
    RUBY_T_FIXNUM = 0x15, 

    RUBY_T_UNDEF = 0x1b, 
    RUBY_T_NODE = 0x1c, 
    RUBY_T_ICLASS = 0x1d, 
    RUBY_T_ZOMBIE = 0x1e, 

    RUBY_T_MASK = 0x1f 
}; 

मुझे लगता है कि उन लोगों में से अधिकांश बल्कि स्पष्ट कर रहे हैं। केवल एक ही जिसे मैं समझ नहीं सकता T_DATA (देखें @ banister की टिप्पणी), T_ZOMBIE और T_MASK

बीटीडब्लू: ध्यान दें कि ये रूबी 1.9 का हिस्सा नहीं हैं। वे यारव का हिस्सा हैं। वे रूबी 1.9 के अन्य कार्यान्वयन पर पूरी तरह अलग हो सकते हैं या पर भी पर मौजूद नहीं हो सकते हैं। दस्तावेज़ीकरण स्पष्ट रूप से बताता है:

लौटा हैश की सामग्री कार्यान्वयन परिभाषित है। इसे भविष्य में बदला जा सकता है।

वास्तव में, यह भी गारंटी नहीं है कि विधि में ही मौजूद है:

इस विधि सी रूबी को छोड़कर काम करने की उम्मीद नहीं है।

(जो द्वारा लेखक शायद मतलब है कि प्रणाली केवल एमआरआई और YARV पर काम करने की गारंटी है।)

+1

और ':

T_NIL :: nil T_OBJECT :: ordinary object T_CLASS :: class T_MODULE :: module T_FLOAT :: floating point number T_STRING :: string T_REGEXP :: regular expression T_ARRAY :: array T_HASH :: associative array T_STRUCT :: (Ruby) structure T_BIGNUM :: multi precision integer T_FIXNUM :: Fixnum(31bit or 63bit integer) T_COMPLEX :: complex number T_RATIONAL :: rational number T_FILE :: IO T_TRUE :: true T_FALSE :: false T_DATA :: data T_SYMBOL :: symbol 

इसके अलावा, कई अन्य आंतरिक रूप से उपयोग प्रकार के होते हैं T_DATA' एक डेटा लिपटे है struct – horseyguy

1

आप ObjectSpace.count_tdata_objects फोन करके T_DATA श्रेणी बारे में अधिक जानकारी प्राप्त कर सकते हैं (here बताया गया है)।

मेरा मानना ​​है कि ये वीएम द्वारा नियंत्रित मूल वस्तुएं हैं। कभी-कभी देशी एक्सटेंशन भी उन्हें आवंटित कर सकते हैं।

0

फ़ाइल प्रकारों को doc/extension.doc में वर्णित हैं रूबी स्रोत कोड में:

T_ICLASS :: included module 
T_MATCH  :: MatchData object 
T_UNDEF  :: undefined 
T_NODE  :: syntax tree node 
T_ZOMBIE :: object awaiting finalization 
संबंधित मुद्दे