Lua学习记录__Lua中的坑

版权声明:转载 请说明 出处 https://blog.csdn.net/qq2512667/article/details/88070985

运算符

其他运算符

#运算符

#一元运算符,返回字符串或表的长度。 #“Hello” 返回 5 ,但是有个坑就是#在用于计算表中的长度时
有下面几种情况

情况1

元素都是给定了下标的时候
比如

local a={[1]=2,[2]=3,[3]=nil,[6]=5}

使用#时,运算机制是:

遇到了nil 就会继续去下个元素找,如果下个元素不是nil,则继续查找,如果是nil 返回结果了

比如:
local a={[1]=2,[2]=3,[3]=nil,[6]=5}
输入
#a 会输出 2,(这里 存在两个是nil的情况,[4]的值为nil,此时它会则会返回了)
输出
而当 下标是连续的时候呢 (此时 只有一个下标为nil,会继续往下个查找)
输入输出
连续两个nil的情况,遇到两个nil 就返回了。
连续两个为nil的情况打印结果
情况1结论

元素都是给定了下标的时候,使用#运算符时,运算机制是:遇到了nil 就会继续去下个元素找,如果下个元素不是nil,则继续查找,如果是nil 返回结果了

情况2

如果元素中都没给定下标 lua内部编排

local b ={"a",nil,nil,nil,"ad"} 
print( #b )  --打印出5

输出
输入打印出3
这里运算方式就是,遇到了nil 就返回;

情况3

混着情况 上面1和2的结合
在这里插入图片描述
此时 b会覆盖掉[1]的位置
下标在前的情况打印出b
#c应该是2打印结果
其实不难理解 ,b把前面的[1]覆盖掉,就剩下b c 了 ;

混的情况下打印结果是2
结论 同2

总结

  1. 元素都是给定了下标的时候: 使用#时,运算机制是:遇到了nil 就会继续去下个元素找,如果下个元素不是nil,则继续查找,如果是nil 返回结果了。
  2. 元素没有给定下标的时候或者混合的情况下 : 使用#时,运算机制是:遇到了nil 就不会继续去查找下个元素了,直接返回结果。

与此机制 类似的
还有 表的遍历关键字 ipairs
遍历的时候,只要遇到了一个nil就返回了,不再继续进行遍历了
.输入输出
待续。

一般lua遇到nil 都会停止返回
if nil then
print(1)
end

猜你喜欢

转载自blog.csdn.net/qq2512667/article/details/88070985