- lua将除了false, nil之外的其他值都在条件判断中视为true, 包括字符串和0
- 关键字大小写敏感
- and or not
- 命令行执行dofile(“xx.lua”) 会执行lua脚本
- 字符串是不可变值,操作字符串会创建一个新字符串
print(#a)
获取字符串a长度"axb" .. "zxy"
..用来链接字符串- 多行字符串用[[ ]]包裹,其中也可以加上等量的等号来消除一些奇异比如 [==[ ]==]
- 表table, 唯一的数据结构,package也是基于表上构建的,math.sin实际的意思是从表math中找key为sin的数据
- 创建表
a={}; a["xx"]=1
a={x =10, y=20}
a={x=1, {x=2, y=3}, {x=9, y=10}}
既有kv 又有list, list用index索引 1 2 3…a={["+"]=1, ["xx"]="yy"}
更加标准的写法a={1,2,3, nil, nil}; print(#a)
== 3, nil元素都不算元素a={1,2,3, nil, 4}; print(#a)
== 5, nil元素都不算元素, 这里有空洞, 空洞后面还有数字所以算5
- pairs遍历,这里key是无序输出的,而且每次可能不一样 ``` t = {10, print, x =12, k=”hi”} for k,v in pairs(t) do print(k,v) end
结果 1 10 2 function: 0x107177067 k hi x 12
- ipairs遍历是有序的,每次一样
- 还有一种
t = {10, print, x =12, k=”hi”} for k=1, #t do print(k, t[k]) end
- 安全访问`zip = ((x or {}).director or {}).zip`
- 当函数只有一个参数时 这两种是等价的 `dofile 'xx.lua' dofile("xx.lua")`
- 可变长度参数函数`function add (...)`然后用ipairs{...}遍历参数
- `string.format`, %q类似于go的%v
- 变量默认为全局变量,局部变量要用local声明
- do - end 视为一个scope
- strict.lua模块会对没有声明而使用的全局变量进行检查
- 循环
- for do end
- while do end
- repeat until
- `::tag::`是作为goto的位置标签
- 函数可以存在table中 这个也是构成module的主要方式
- 错误处理
- pcall接受一个函数,如果函数执行出现了异常pcall返回消息
- xpcall可以把完整的栈信息打出阿里
- error函数会抛出一个异常
- metatable可以给一个table设置一个metatable,其可以用作重写一些操作符,比如+ - * / 构造只读表等
- 面向对象
Account = {b = 0}; function Account:withdraw(v) self.b = self.b - v end 等同于 function Account.withdraw(self, v) self.b = self.b - v end ```