Quickly get started with Lua
重点: Luajit相比'标准'不具备哪些'新特性',相比'标准'具备哪些新特性?
参考: Lua 作者编写的 '<<Lua 程序设计>>'这本书
① Introduction to lua
关注点: 'Lua' 是 OpenResty 中使用的'编程语言',掌握它的'基本语法'还是很有'必要'的
后续: 关注'不同redis版本'内嵌的lua版本'可使用'的lua特性
② Introduction to luajit in openresty
luajit 在 /usr/local/openresty/luajit/ 目录中,'避免污染系统的 luajit'
③Data type
1) 通过 'type 函数'来返回一个值的'类型'
2) '字符串' --> '特性和注意事项'
3) 表达一个字符串:'单引号、"双引号"'、以及'长括号 [[]]'
4) 布尔值 --> 'boolean'
重点:在 Lua 中,只有 'nil 和 false' 为'逻辑假',其他都为'逻辑真',包括'0 和空字符串'也为真
在 Lua 中,'空值就是 nil'
案例: 如果你'定义'了一个变量,但'没有赋值',它的'默认值'就是 nil
备注: 后续'nil'和其它'ngx.null'等空值多对比
Null values in openresty: nil, ngx.null, cjson.null, cdata: NULL Openresty's true and false pits
最佳实践:
[1]、上述'判断方式'和很多常见的'开发'语言并'不一致'
[2]、所以,为了'避免'在这种问题上'出错',建议'显式地'写明'比较的对象'
细节点: '~='不等于,'不是'正则比较
5) number '数字'
6) function '函数'
函数在 Lua 中是一等公民:
[1]、可以把'函数'存放在一个'变量'中 --> 常见把'函数'放到table中
[2]、可以当作'另外一个函数'的'入参'和'出参'
+++++++++++ "两个函数的声明是完全等价的" +++++++++++
function fun()
...
end
备注: "推荐前者"
fun = function ()
...
end
④Commonly used standard libraries
强调: 函数性能的'优先级'很重要
1) '字符串' string库函数
2) table '库函数'
3) math '数学函数库'
[1]、可以在'指定的范围'内,'随机'地生成'两个数字'
推荐: '机器名+进程ID+线程ID+毫秒时间戳'做种子
秒级的os.time在'短时间(1s内)'调用中,random函数会以'相同的随机种子'产生'相同'的随机数
uuid 本身也是先有种子,然后通过随机数生成的。
Certificate encryption and decryption haveged supplementary entropy
⑤Dummy variable
所谓的虚变量就是一个'普通的变量',没有任何特殊之处,只不过是'不用它的值'而已
虚变量'场景':除了在'返回值'里使用,虚变量还经常用于'循环'中
⑥The problem of entropy