2013-05-07 57 views
6

我對Ruby很新,但是當我搜索Ruby的文檔時,我發現一些C源代碼也包含在文檔中。在幾乎所有這些參考文獻中,我找到了VALUE,我很確定它的一個struct。但是這個VALUE struct的屬性是什麼,這實際上在做什麼?Ruby源文件中的「VALUE」類型是什麼?

+3

任何Ruby對象在C中內部表示爲「VALUE」類型。 – sawa 2013-05-07 13:14:13

+1

這是Ruby實現的細節。作爲* Ruby *開發人員,您無需擔心;底層的C實現與Ruby編程幾乎沒有關係。 – meagar 2013-05-07 13:43:42

+1

然而,如果你想要利用這些知識,並且擁有一些基本的C,那麼它們都非常容易訪問。這就是大多數本地擴展實際上是如何工作的。請參閱http://media.pragprog.com/titles/ruby3/ext_ruby.pdf和/或http://guides.rubygems.org/c-extensions/ – 2013-05-07 13:45:01

回答

3

在C中,變量有類型,數據沒有類型。相比之下,Ruby變量沒有靜態類型,數據本身也有類型,所以數據需要在各種語言之間進行轉換。

Ruby中的數據由C型「VALUE」表示。每個VALUE數據都有其數據類型。

從某個值進行檢索C數據,您需要:

1.確定值的數據類型

2.轉換價值爲C數據

對於更多信息請看這裏:Basic Knowledge

+0

好吧,現在我明白了。 Ruby中的每個數據類型在C中都有相應的數據類型(或者它們被轉換成這種類型),不是嗎? – Sazid 2013-05-07 14:12:09

+0

@Sazid如果你閱讀我鏈接的文檔,事情將被清除。我相信。 – 2013-05-07 14:27:52

9

你可以看到的定義在頭文件:

#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 2013-05-07 14:08:46