微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

lua – 如何在表中表示nil

我们假设我想存储一个元素列表.包括一些零值.值的位置很重要,我需要在给定位置表示列表中缺少值.

这是一个问题:

a = {1,2,3,nil,4}

for k,v in ipairs(a) do
  print(k,v)
end

print(a[4]) 
print(a[5])

for循环只会打印元素1,2和3.它会停止为零.第一个print语句打印nil,但我不确定它是否实际存储在表中. (谁知道?)第二个打印语句打印4 – 正如预期的那样.

所以这里有一个问题:如何表示表中的元素列表,并有效地迭代它们?鉴于上述条件,例如这个职位很重要,而且有些职位“空洞”.换句话说:没有价值,但在那个位置缺乏价值具有意义.

解决方法

这是模块“null.lua”

local function null(...)
   local t,n = {...},select('#',...)
   for k = 1,n do
      local v = t[k]
      if     v == null then t[k] = nil
      elseif v == nil  then t[k] = null
      end
   end
   return (table.unpack or unpack)(t,1,n)
end
_G.null = null

使用null()作为编码器和解码器

require("null")

a = {null(1,4)}
-- the same Could be done element-by-element
-- a = {null(1),null(2),null(3),null(nil),null(4)}

for k,v in ipairs(a) do
   v = null(v)
   print(k,v)
end

print(null(a[4]))
print(null(a[5]))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐