我正在使用Lua 5.2,并且为了这个问题,假设这些表专门用作数组.
function tail(t) if # t <= 1 then return nil end local newtable = {} for i,v in ipairs(t) do if i > 1 then table.insert(newtable,v) end end return newtable end
例如:
prompt> table.concat(tail({10,23,8}),“,“)
23,8
但是,这是通过返回表的新副本来实现的.有没有办法避免创建新表?
我正在寻找相当于C的返回指向下一个元素(t)的指针.可能吗?
解决方法
如前所述,这通常是不可能的.
但是,使用元表,您可以通过引用原始表来实现执行所需操作而无需复制所有数据的尾部函数.以下适用于Lua 5.2中的大多数操作,但不适用于table.concat:
function tail(t) return setMetatable({},{ __index = function(_,k) return t[k+1] end,__newindex = function(_,k,v) t[k+1] = v end,__len = function(_) return #t-1 end,__ipairs = function(_) return function(_,i) if i+1==#t then return nil end return i+1,t[i+2] end,t,0 end,__pairs = function(t) return ipairs(t) end,}) end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。