版权声明:转载 请说明 出处 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 就返回了。
情况1结论:
元素都是给定了下标的时候,使用#运算符时,运算机制是:遇到了nil 就会继续去下个元素找,如果下个元素不是nil,则继续查找,如果是nil 返回结果了
情况2
如果元素中都没给定下标 lua内部编排
local b ={"a",nil,nil,nil,"ad"}
print( #b ) --打印出5
这里运算方式就是,遇到了nil 就返回;
情况3
混着情况 上面1和2的结合
此时 b会覆盖掉[1]的位置
其实不难理解 ,b把前面的[1]覆盖掉,就剩下b c 了 ;
结论 同2
总结
- 元素都是给定了下标的时候: 使用#时,运算机制是:遇到了nil 就会继续去下个元素找,如果下个元素不是nil,则继续查找,如果是nil 返回结果了。
- 元素没有给定下标的时候或者混合的情况下 : 使用#时,运算机制是:遇到了nil 就不会继续去查找下个元素了,直接返回结果。
与此机制 类似的
还有 表的遍历关键字 ipairs
遍历的时候,只要遇到了一个nil就返回了,不再继续进行遍历了
.
待续。
一般lua遇到nil 都会停止返回
if nil then
print(1)
end