加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua:跳过变量声明

发布时间:2020-12-14 21:47:59 所属栏目:大数据 来源:网络整理
导读:我试图“跳过”一个变量,从未声明它或者只是立即收集垃圾,但我不知道它是否可能. 例: function TestFunc() return 1,2endfunction SecondFunction() local nodeclare,var = TestFunc()end 基本上我想要的是“nodeclare”甚至不存在.所以,如果我打印(nodecla
我试图“跳过”一个变量,从未声明它或者只是立即收集垃圾,但我不知道它是否可能.

例:

function TestFunc()
   return 1,2
end

function SecondFunction()
   local nodeclare,var = TestFunc()
end

基本上我想要的是“nodeclare”甚至不存在.所以,如果我打印(nodeclare,var),它将为nil,2.
同样的事情是,如果我做一个对循环,我不需要使用keyvalue.
我可以将一些特殊的东西作为变量名称来实现吗?如果说我正在进行超过100个值的对循环,那么这甚至会产生显着的影响吗?

解决方法

首先,变量不是垃圾收集,而是对象.在这种情况下,没有垃圾收集.

但是,假设TestFunc正在创建对象(比如表):

function TestFunc()
   return {1},{2}
end

function SecondFunction()
   local nodeclare,var = TestFunc()
end

现在,nodeclare引用了TestFunc返回的表.这是一个在堆上分配的对象,我们不想永远地闲逛.

如果没有任何东西引用它,最终将收集该对象.在您的情况下,只要SecondFunction返回,本地nodeclare就会超出范围并消失.只要没有其他任何引用该表的内容,就会收集该表(在下一个收集周期中).

您可以通过跳过TestFunc的第一个返回值来完全避免声明nodeclare,如下所示:

local var = select(2,TestFunc())

但是,当您谈论临时局部变量时,如您的示例中所示,通常只需创建临时变量然后忽略它.这避免了调用select的开销.有时你使用一个变量名来表明它是垃圾:

local _,var = TestFunc()

If say I was doing a pairs loop over 100 values,would that even have a signifigant impact?

没有任何.你只是不断地覆盖局部变量的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读