每个对象都有一个与变量可以关联的引用,对吗?
这些参考是什么样的?这是你打印时得到的(table1)吗?
0x100108fb0例如?
如果是这样,是否有一个函数可以显示更基本类型的引用,如字符串和数字?
答案 0 :(得分:4)
不要混淆对象,引用和变量。
表,函数,线程和(完整)userdata值是对象:变量实际上不包含这些值,只是对它们的引用。
因此,如果变量的值是nil
类型或数字,则变量实际上包含它,而不是仅引用它。这类型没有参考。我不知道为什么在参考手册的上述引文中遗漏了字符串;也许是因为字符串是不可变的,对于Lua程序员来说,变量是否包含字符串引用或值是没有区别的。但是,从技术上讲 - 从C的角度来看 - 字符串是从变量引用的,而不是包含的。
引用只是一个指针,即内存中引用对象的地址。当打印为十六进制数字时,它“看起来”像0x100108fb0
。
如果是这样,是否有一个函数可以显示更基本类型的引用,如字符串和数字?
对于后者,正如我所写,根本没有参考。对于字符串,没有办法在普通Lua中打印地址,但无论如何你都不需要知道它。
您可能还想阅读Programming in Lua参考手册的相应部分。
答案 1 :(得分:1)
每个对象都有一个与变量可以关联的引用,对吗?
没有。 Lua将值表示为标记的联合(类型,值)。对于表示number
,bool
或nil
的变量,该值直接存储在union中。对于string
,table
,function
,userdata
和thread
,值是指针(引用)或与内存位置相关的指针集对象的标题。
这些参考文献是什么样的?
正如Oberon所说,引用指向内存中的一个点,当以十六进制表示时看起来像0x0 ..
如果是这样,是否有一个函数可以显示更基本类型的引用,如字符串和数字?
number
,bool
或nil
,没有任何参考。对于字符串,没有标准的方法在Lua中打印它们的地址。对于table
,function
和thread
,您可以使用print()。不确定userdata,您可能需要自己定义。
this article中的简明语言涵盖了这些类型的许多实现细节。