运行指定Lua代码时,返回预创建table是否生成新表?如何验证?
Lua代码返回table的类型判断及验证方法
这段代码返回的是预先创建好的table,不会在每次调用SomeFunction时生成新table。
原因说明
MyTable = {}是在全局作用域执行的代码,程序启动后会立刻创建这个空table并绑定到全局变量MyTable上。SomeFunction的逻辑只是直接返回这个全局变量指向的table实例,函数内部没有新的{}创建语句,所以每次调用都返回同一个预先创建的table。
验证方法
这里提供几种简单的验证方式:
- 修改返回的table,观察原变量的变化
MyTable = {} function SomeFunction() return MyTable end local returnedTable = SomeFunction() returnedTable.test = "hello" print(MyTable.test) -- 输出"hello",说明两者是同一个table
如果是新生成的table,修改返回的table不会影响原MyTable,现在结果同步,证明是同一个实例。
- 使用
rawequal函数直接判断是否为同一对象
MyTable = {} function SomeFunction() return MyTable end local returned = SomeFunction() print(rawequal(returned, MyTable)) -- 输出true,代表是同一个table
Lua中table是引用类型,rawequal会严格判断两个值是否指向内存中的同一个对象,返回true则说明是同一个实例。
- 多次调用函数,对比返回结果的关联性
MyTable = {} function SomeFunction() return MyTable end local t1 = SomeFunction() local t2 = SomeFunction() t1.foo = "bar" print(t2.foo) -- 输出"bar",说明t1和t2是同一个table
如果每次调用生成新table,t2不会有foo这个键值对,结果同步则证明是同一个实例。
内容的提问来源于stack exchange,提问作者Tower
相关产品推荐
相关产品推荐

