一 类型和值
(1)重点
1)Lua是一种'动态类型'的语言,这意味着'变量没有类型',只有'值有类型',语言中'没有类型定义',所有'值都带有自己的类型'
对比理解
1)'C语言'
int a =9
2)'Lua语言'-->数值9已经表明是'number'类型
a = 9
(2)Lua基本的8种类型
说明:函数type-->获取'一个值'对应的'类型名称'
二 nil
(1)基本定义
nil是一种只有一个'nil值'的'类型',主要作用:与'其它所有值'进行区分
openresty lua的 userdata:null与ngx.null问题总结
(2)什么场景是nil值
对比:'nil'、false、0、''
++++++++'结论'++++++++
条件测试中: 将除'boolean'类型中的'false'值和'nil'外的所有其它值'视为真'
备注:'0'和'空字符'串也视为'真'
(3)应用场景
(1)用 nil 来'删除' 变量或'table 表'中的值
(2)用作'比较'
说明:nil 作'比较时'应该加上双引号
原因:type(?)的返回值永远是'字符串'
需求:lua中如果'函数返回值'是nil,'如何判断'?
function r()
return nil
end
-- if(r()) then .....end
-- '严格要求'nil 得这么写
if(r() == nil) then ... end
(4)nil回收
场景: 可见nil只是将'内存至 0' 并没有释放,只有在'对象结束生命周期',lua'垃圾机制'才会回收
三 boolean
Boolean类型有两个值:'true'和'false'
(1)Lua语言支持常见的逻辑运算符
'逻辑运算符':and、or、not
备注:所有的'逻辑运算符'将boolean类型的'false和nil'当作'假'
① and
特点: 遵循'短路求值'原则,即:只在'必要时'才对'第二个操作数'进行求值
必要时理解: 如果第一个'one'操作数为'flase',则'返回第一个'操作数,否则返回'第二个'操作数
实际:如果第一个操作数是'flase'或'nil',则返回nil
思考:是不是'版本不同'所引起的,'后续验证'
++++++'案例讲解'++++++
false and 13 --> 'flase'
② or
说明:如果它的第一个操作数不为'flase',则返回第一个操作数,否则返回第二个操作数
备注:如果第二个操作数是'flase'或'nil',则返回nil
③ not
说明: not运算符永远返回'boolean类型的值'
④ 应用场景
1)如果'未初始化',就'赋予默认值'
原因:未初始化则为'nil',则进行'初始化'
2)三目'运算符'
说明:通过逻辑运算符'and和or来模拟'三目运算符
一般形式:'a ? b : c'
注意:当 'b = false' 时,Lua模拟的 a and b or c 始终返回 c 并'不能还原'三目运算符的原貌
++++++++++++'分割线'++++++++++++
选出'最大值':(x > y) and x or y
-- '最佳实践'
int a, b, ret;
//if-else
if (a > b)
ret = a
else
ret = b
-- '三目运算符'
ret = a > b ? a : b