Lua 中的这两段代码有什么区别



我一直在从 http://www.lua.org/pil/3.6.html 学习Lua中的表构造函数,但我无法理解这两段代码之间的区别。

--between code I've written--    
list = nil
for line in io.lines() do
list = {value=line}
end
l = list
while l do
print(l.value)
end
--and between code they have written--
list = nil
for line in io.lines() do
list = {next=list, value=line}
end
l = list
while l do
print(l.value)
l = l.next
end

链表需要有办法到达链中的下一个值。

如果不在表中定义next则没有下一个值,索引value不会自动l移动到列表中的下一个值。如果不定义next = listlist的最后一个值将丢失,最终结果将只是一个值,即数据源中的最后一个值。

我更改了此示例,因此不需要使用文件:

在这里,您的代码每次都会无限期地循环打印 f。

list = nil
for _,letter in ipairs({'a','b','c','d','e','f'}) do
list = {value=letter} -- we reassign list with new data without preserving the 
-- previous data
end
l = list
while l do
print(l.value)        -- the last value of list was {value = 'f'} and it will not
-- change in this loop
end

其中,作为示例中的代码将遍历给定的每个值并完成。

list = nil                       -- this marks the end of the list and creates our name
-- we will use to store the list.
for _,letter in ipairs({'a','b','c','d','e','f'}) do
list = {next=list, value=letter} -- the first loop we will create a table where `next` is
-- nil.
-- on the second loop we create a table where `next` is 
-- referencing the table from loop 1 that is stored in list.
-- this will repeat until we have gone through all the
-- letter from our source.
end
l = list
while l do                       
print(l.value)                   -- print our letter.
l = l.next                       -- move on to the table we stored in `next`.
-- this loop ends when we get to the value where 
-- `next` was nil.
-- the table from the first loop of our for loop.
end

代码的 for 循环不保留以前的值listlist最终将包含输入的最后一行。您的 while 循环将是无限的。

其代码的 for 循环将以前的list值保存在新的list值中。它们的 while 循环在每次迭代时都会l变化。因此,它每次打印不同的值,并在nill时停止。

相关内容

  • 没有找到相关文章

最新更新