2013-03-03 60 views
0

每個對象都有一個變量可以與之相關的參考,是正確的?Lua中對象的「引用」是什麼樣的?

這些引用是什麼樣子的?當你打印時(table1)是什麼?

0x100108fb0例如?

如果是這樣,是否有一個函數可以顯示更原始類型的參考,如字符串和數字?

回答

4

不要混淆對象,引用和變量。

Lua 5.2 Reference Manual報價:

表,函數,線程和(全)用戶數據的值是對象:變量實際上不包含這些值,只對它們的引用。

因此,如果變量的值是nil或數字類型,變量實際上包含它,而不是僅引用它。沒有涉及這種類型的參考。我不知道爲什麼字符串在參考手冊的上述引用中被遺漏;也許是因爲字符串是不可變的,對於Lua程序員來說,變量是否包含字符串引用或值是沒有區別的。然而,從技術角度來說 - 從C的角度來看 - 字符串是從變量引用的,而不是被包含的。

引用只是一個指針,指向對象在內存中的地址。當打印爲十六進制數字時,它看起來像0x100108fb0

如果是這樣,有沒有可以顯示的更原始的類型,如字符串和數字的引用的功能?

對於後者,正如我寫的,根本沒有任何參考。對於字符串,無法在簡單的Lua中打印地址,但無論如何您都不需要知道。

您可能還想閱讀Programming in Lua參考手冊的相應部分。

1

每個對象都有一個變量可以與之相關的引用,是正確的嗎?

編號Lua將值標記爲標記的聯合(類型,值)。對於代表numberboolnil的變量,該值直接存儲在聯合中。對於string,table,function,userdatathread,該值是一個指針(引用),或與該對象頭部的內存位置相關的一組指針。

這些引用是什麼樣子的?

正如Oberon所說,參考指向內存中的一個點,以十六進制表示時,它看起來像0x0 ..

如果是這樣,有沒有可以顯示的更原始的類型,如字符串和數字的引用的功能?

numberboolnil,沒有任何參考。對於字符串,在Lua中沒有標準的方式來打印他們的地址。對於tablefunctionthread,您可以使用print()。不確定用戶數據,這可能需要自己定義。

這些類型的許多實現細節在this article中以簡明語言覆蓋。

+0

我試着將這些改進添加到Oberon的答案中,但是我的編輯未被批准。 – 2013-03-04 05:42:08

相關問題