Lua中对象的“引用”是什么样的?

时间:2013-03-03 11:12:01

标签: reference lua

每个对象都有一个与变量可以关联的引用,对吗?

这些参考是什么样的?这是你打印时得到的(table1)吗?

0x100108fb0例如?

如果是这样,是否有一个函数可以显示更基本类型的引用,如字符串和数字?

2 个答案:

答案 0 :(得分:4)

不要混淆对象,引用和变量。

引用Lua 5.2 Reference Manual

  

表,函数,线程和(完整)userdata值是对象:变量实际上不包含这些值,只是对它们的引用。

因此,如果变量的值是nil类型或数字,则变量实际上包含它,而不是仅引用它。这类型没有参考。我不知道为什么在参考手册的上述引文中遗漏了字符串;也许是因为字符串是不可变的,对于Lua程序员来说,变量是否包含字符串引用或值是没有区别的。但是,从技术上讲 - 从C的角度来看 - 字符串是从变量引用的,而不是包含的。

引用只是一个指针,即内存中引用对象的地址。当打印为十六进制数字时,它“看起来”像0x100108fb0

  

如果是这样,是否有一个函数可以显示更基本类型的引用,如字符串和数字?

对于后者,正如我所写,根本没有参考。对于字符串,没有办法在普通Lua中打印地址,但无论如何你都不需要知道它。

您可能还想阅读Programming in Lua参考手册的相应部分。

答案 1 :(得分:1)

  

每个对象都有一个与变量可以关联的引用,对吗?

没有。 Lua将值表示为标记的联合(类型,值)。对于表示numberboolnil的变量,该值直接存储在union中。对于stringtablefunctionuserdatathread,值是指针(引用)或与内存位置相关的指针集对象的标题。

  

这些参考文献是什么样的?

正如Oberon所说,引用指向内存中的一个点,当以十六进制表示时看起来像0x0 ..

  

如果是这样,是否有一个函数可以显示更基本类型的引用,如字符串和数字?

numberboolnil,没有任何参考。对于字符串,没有标准的方法在Lua中打印它们的地址。对于tablefunctionthread,您可以使用print()。不确定userdata,您可能需要自己定义。

this article中的简明语言涵盖了这些类型的许多实现细节。