gpt4 book ai didi

Lua:跳过变量声明

转载 作者:行者123 更新时间:2023-12-03 16:07:10 24 4
gpt4 key购买 nike

我试图“跳过”一个变量,要么从不声明它,要么立即对其进行垃圾收集,但我不知道这是否可能。

例子:

function TestFunc()
return 1, 2
end

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

基本上我想要的是“nodeclare”甚至不存在。所以如果我做 print(nodeclare, var) 它会做 nil, 2.
如果我正在执行对循环并且不需要使用键值,情况也是如此。
有什么特别的东西我可以作为变量名来实现吗?如果说我正在做一个超过 100 个值的对循环,那甚至会产生重大影响吗?

最佳答案

首先,变量不是垃圾收集的,对象是。在这种情况下,没有什么可垃圾收集的。

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

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

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

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

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

您可以避免声明 nodeclare完全跳过 TestFunc 的第一个返回值像这样:
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?



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

关于Lua:跳过变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22079170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com