使用Lua中的函数修改链接列表

时间:2018-02-15 19:24:13

标签: lua scripting linked-list pico-8

我的问题是关于以下代码段:

function add_node(list, v)
 list={next=list, val=v}
end

function print_linked_list(list)
 local l=list
 while l do
  print(l.val)
  l=l.next
 end
end

root=nil
root={next=root, val=0}
add_node(root, 1)
--root={next=root, val=2}
print_linked_list(root)

如果我通过当前注释的“root = {nxt = root,val = 1}”进行操作,它按预期工作。打印功能将遍历列表并打印两个值。如果我通过脚本顶部的add_node函数添加一个新节点,该函数基本上具有相同的代码,它将只打印第一个创建的节点。

为什么将操作置于函数中不能正确修改列表?我唯一能想到的是add_node(list,v)中创建的节点只是本地的。

最后,如何在保持代码可读的同时解决这个问题?

1 个答案:

答案 0 :(得分:2)

  

我唯一能想到的是add_node(list,v)中创建的节点只是本地的。

这是对的。函数参数是隐式本地的。您需要做的就是返回值而不是分配它:

function add_node(list, v)
  return {next=list, val=v}
end

后来:

root = add_node(root, 1)