为什么要学 lua ?
- neovim/nvchad/… 支持 lua 写配置文件
- WezTerm 也是用 lua 写配置文件
用 lua 写配置,其实更多的是倾向于嵌入式编程,写配置用 json/toml/yaml/xml 等文件可能更加好一点
安装
以 linux 为例,windows 和 macOS 差不多(也是使用 brew 安装,更加方便)
curl -R -O http://www.lua.org/ftp/lua-5.4.4.tar.gz
tar zxf lua-5.4.4.tar.gz
cd lua-5.4.4
make all test
sudo make install
which lua # 检查 lua 命令
repl 环境和文件运行
- lua 的 repl 环境
- 在文件编写 .lua 文件,然后使用 lua 命令运
这里使用第二种 lua 文件运行,了解 lua 的模块化,从而能组成一个完整的程序
第一个 lua 程序
touch index.lua
nvim index.lua
print("hello world")
- 增加 shebang 开头注释不需要 lua 运行
#!/usr/local/bin/lua
print("hello world")
变量
- 全局变量(注意:没有声明)
- 本地变量(使用 local 声明)
- 函数声明变量 (使用 function 声明)
- 表中域
t = {} t["k"] = "v"
- 代码块中的变量 (代码使用 缩颈和关键字包含,没有 {} 包含)
- 变量赋值* 使用
,
分割变量x, y = y, x
lua 类型系统
没有类型标注,使用 type 判断类型
类型 | type | 说明 |
---|---|---|
nil | type(nil) -> nil |
nil 表示空,相当于:false。 一个未定义的变量使用时是 nil |
string | type("hello world") -> string |
字符串支持单双 引号 |
boolean | type(false) -> boolean |
false/true |
number | 3.14 * 2 -> number |
双精度实浮点型 |
function | type(print) -> function |
Lua或C函数 |
userdata | type(io.stdin) -> userdata |
表示任意存储在变量中的C数据结构 |
thread | type(type) -> thread |
表示执行的独立线路,用于执行协同程序 |
table | type({}) -> table |
“关联数组”(associative arrays |
注释
- 单行注释:
--
- 多行注释
--[[print("not work, commented")
--]]
字符串
- 块状字符串
[[]]
操作符 - 字符串拼接
..
操作符 - 字符串长度
#"your string"
# 号操作符
字符串的隐式操作行为,就不在这里讨论了,或者有时间在补充。
函数与函数调用以及函数返回值
- 声明一个命名函数
function end
关键字
function fn