在我的主协程中,我根据用户操作从表中删除或添加条目。在后台,我希望迭代表中的条目。如果我在一次迭代中错过了插入,但能在下一次迭代之前捕获它,那对我来说没什么关系。
使用pairs函数迭代表是否安全?还是应该使用next函数?
使用pairs函数迭代表是否安全?还是应该使用next函数?
在遍历表格时,您可以安全地删除条目,但无法创建新的条目(即新键)。但是,您可以修改现有条目的值。(删除条目是该规则的特例。)
next()
的文档警告说:
关于在遍历表时,不应为不存在的字段赋值。但可以修改已存在的字段。特别是可以将已存在的字段设置为nil。
pairs()
的文档也指出了同样的注意事项(因为它在内部使用了next()
),所以在pairs()
中删除是可以的,但添加则不行。
顺便提一下:ipairs()
没有指定任何限制!(它只是递增索引直到达到nil,所以插入可能会破坏顺序,但行为是明确定义的。)