解决方法
哪个使用是一个偏好和情况的问题:由于#版本的操作符在版本5.1中被引入,所以t [#t 1] =我将不会在Lua 5.0中工作,而table.insert从5.0开始就可以使用,都。另一方面,t [#t 1] = i仅使用语言级别的运算符,wheras table.insert涉及到一个函数(它具有少量的开销来查找和调用,并且取决于环境中的表模块) 。
在第二版Programming in Lua(Lua 5.0版第一版的更新)中,Roberto Ierusalimschy(Lua的设计师)说,他更喜欢t [#t 1] = i,因为它更明显。
另外,根据你的用例,答案可能是“不”。见the manual entry on the behavior of the length operator:
If the array has “holes” (that is,nil values between other non-nil values),then #t can be any of the indices that directly precedes a nil value (that is,it may consider any such nil value as the end of the array).
因此,如果您正在处理具有漏洞的数组,则使用(table.insert
uses the length operator)可能会将值附加到数组中的较低索引。在这种情况下,您如何定义数组的大小取决于您,而且依赖于优先级和环境:您可以使用table.maxn(在5.2中消失,但很简单),您可以在n表,并在必要时进行更新,您可以将表包装在Metatable中,或者您可以使用更适合您的情况的其他解决方案(在循环中,紧邻循环外的本地tsize通常就足够了)。