【发布时间】:2016-10-23 21:29:24
【问题描述】:
table.remove 的The reference manual 说:
table.remove (list [, pos])从
list中删除pos位置的元素,返回被删除元素的值。当pos是1和#list之间的整数时,将元素list[pos+1]、list[pos+2]、···、list[#list]向下移动并擦除元素list[#list];当#list为0或#list + 1时,索引pos也可以是0;在这些情况下,该函数会删除元素list[pos]。
pos 是 0 或 #list + 1 的最后两个特殊情况让我很感兴趣。
pos 的示例代码为0:
local t1 = {[0] = 'foo'}
table.remove(t1, 0)
在这种情况下,元素 t1[0] 被删除。
pos 的示例代码为#list + 1:
local t2 = {'foo', 'bar', 'baz'}
table.remove(t2, #t2 + 1)
在这种情况下,什么都没有改变,除了语句不会引发错误。
我的理解正确吗?这两种特殊情况在实践中什么时候有用?
我还注意到这两种情况是从 Lua 5.2 开始添加的
【问题讨论】:
-
@Babyy 长度为
t2 -
在许多情况下
table.remove(t, 1)和table.remove(t, #t)应该更好地有效,即使#t == 0,这就是引入这些特殊情况的原因。 -
好像是在Lua 5.2.2 的rc2 和rc3 之间添加的:lua.2524044.n2.nabble.com/…