gpt4 book ai didi

lua - Lua 中的链表

转载 作者:行者123 更新时间:2023-12-04 23:54:59 28 4
gpt4 key购买 nike

我最近一直在查找 Lua 中的链表,并有一个简单的问题,到目前为止我还没有找到答案

local head = nil

head = {next = head, value = "d"}
head = {next = head, value = "c"}
head = {next = head, value = "b"}
head = {next = head, value = "a"}

local entry = head

while entry do
print(entry.value)

entry = entry.next
end

这将最终打印出“a,b,c,d”。我理解为什么它会向后打印,因为第一个可用的“节点”将是最后一个创建的节点(值 = a)。我的问题是为什么在最后一个之前创建的“头部”仍然存在并且没有简单地在内存中被覆盖。

最佳答案

“在内存中覆盖”是什么意思?你正在做的任何事情都不会导致这种情况发生。

让我们一步一步地看看你在做什么。

local head = nil

现在存在一个名为 head 的局部变量.它的值为 nil .
head = {next = head, value = "d"}

让我们把它分解成这里的操作顺序。这等效于以下内容:
do
local temp = {}
temp.next = head --This is still `nil`
temp.value = "d"
head = temp
end

您构建的每个表都是一个唯一值。所以让我们称这个第一个表 table-d .它被构造,存储在临时变量 temp 中。 .该表被赋予 next nil 的值.它得到一个 value "d" 的值.并将结果存储在局部变量 head 中.

所以现在 head具有值 table-d .下一步:
head = {next = head, value = "c"}

一样:
do
local temp = {}
temp.next = head --Not nil anymore.
temp.value = "c"
head = temp
end

好的,我们创建一个新表。为清楚起见,我们将此表称为 table-c .

我们将其存储在 temp .然后我们将它设置为 next字段到 head 中的值.该值是 table-d .我们设置了 value字段到 "c" .然后存储 table-c进入 head .
table-c表看起来像这样:
{
next = { value = "d" }
value = "c"
}

那就是存储在 head 中的表.

就这样继续下去。那么什么地方会被“覆盖”呢?

关于lua - Lua 中的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18067416/

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