Lua 是一种轻量级的脚本语言,不需要编译,可以直接运行
与c# 有些不同 首先Lua 不需要分号结尾(写也没问题)
注释: 单行注释 -- 多行注释 以--[[ ....... ]]
定义:1 定义变量不需要写变量类型 变量名= 值 (变量名(标识符)以一个字母或下划线开发,后加0个 或多个字符或下划线或数字)
2 Lua是区分大小写的 注意: 下划线加大写字母开头,这种格式一般情况lua自己保留尽量避免使用
数据类型
1. 空数据用nil 表示, 相当于c#的null ; lua中没有整型和浮点型之分,就是number 数字类型
布尔类型 boolean ; 字符串类型 没有字符字节之分 可以使用 双引号、单引号或[[..]] 表示
2. 字符串的连接 用 .. 两个点来连接
3. 字符串的算术运算,数字类型的字符串 lua会自动转换成number类型进行计算
4. 获取字符串长度 : # 变量名
流程控制语句
注: lua中除了false 和 nil 是假, 其余任意的类型数据都是 真
if 条件 then if 条件 then
print() print()
else elseif 条件 then
print() print()
end end
注意: 条件后跟then 最后 跟end , c#中 else if 在lua中 是 elseif
运算符
注: lua 中可以对小数 求余 。 lua中没有++ += -= 运算符 只能是用 a = a+1
关系运算符 : == 等于 < > <= >= 小于,大于,小于等于,大于等于
~= 不等于
逻辑运算符: 与 and 或 or 非 not
循环语句
while 循环 while[循环条件]do ... [循环体] ... end
a = 0
while a < 10 do
print (a)
a = a + 1
end
repeat 循环 repeat ... [循环体] ... until [跳出循环条件]
相当于 do{} while()循环,但是又有一点不同 Lua语句条件判断是满足就跳出循环
(c#中 do while 是直到不满足条件时 跳出)
for 循环 for [number变量初始化] ,[变量到多少跳出],[每次加的数值] do
.... 循环体 ....
end
-- 如果不填入每次加的数值,默认每次变量加1
注意: lua中可以使用break 跳出循环,但是没有continue语法
table表 lua中table表 是一个“关联数组” , 数组的索引可以是数字可以是字符串 类似字典
创建: t = {k = "bu" , "a" , [2] = 1 , "nihao" }
“a” : 没有指定索引,会按默认的索引走, [2] = 1 表示数值1指定数字类型2的索引
k = "bu" : 数值“bu” 指定了一个字符串k的索引
注意: 默认索引的优先级要高于指定的索引的优先级,所以会搜索不到[2] = 1 这个值
访问:
t ["索引"] 或者 t . 索引名 / / 数字索引不用加双引号
修改:
t [数字] = 值 / t ["索引"] = 值 / t . 索引名= 值
删除:
t [索引] = nil
Lua数组(本质上也是table表) t = {"a" , "n","e"}
遍历: for i=1 , #t do
print(t[i])
end
默认 索引从1开始 ,不是从0开始的。 不过可以有0号索引,甚至是符号索引
注意: # 获取的是从1开始的 连续的长度
迭代器
for 变量1 , 变量2 in pairs (table的变量名) do
... [循环体]...
end
遍历该变量 table表中 所有的 键 和值
函数(方法)
1. 两种方式: function方法名(参数)方法体 end
方法名 = function (参数) 方法体 end
注意: 调用方法时,看上方有无定义方法 。 带有参数的方法里面的参数可以传任意类型
2. 可变参数的方法 functoin 方法名(...) --... 表示是可变参数 / 固定写法,可以往里面任意的参数
所有传递进来的参数都存放在一个arg表里 , 可以通过遍历来获取传递进来的参数
3. Lua里面没有 ref 和out 关键字 : 因此 若是
function func1 ()
return 返回值1 , 返回值2 , 返回值3,....
end
需要多个变量接受 变量1,变量2,变量3, ... = func1()
接受变量可以多于返回值,多出来的变量按nil处理;
;接受变量也可以少于返回值,多出来的返回值不处理
小知识点: 1.在lua中没有全局和局部变量之分
局部变量 需要加关键字 local修饰的变量 默认情况下是全局性的
2. lua 支持转义字符
3. require 的加载路径 lua提供给了一个package. path 保存了require能加载的所有的路径,每个路径以分 号分隔开
.\ 表示的是当前文件所在的目录 .. \ 表示的是当前文件所在的目录的上级目录
注意因为支持转义字符,所以添加路径是 不能使用单斜杠,使用双斜杠
最后以 \\?.lua 结尾 。 且路径开头要加 ; 分号哦
使用了 .\ package.path = package.path .. ";.\\Model\\?.lua"
不使用的话,需要完整的目录路径
4. Lua元表 即 相当于重载运算符,setmetatable(t1,t2) 设置t2 为 t1 的元表
getmetatable (t1) 获取t1 的元表
算术类元方法: __add(+) __suh(-) __mul(*) __div(/) __mod(%) __unm(相反数)
关系类元方法: __eq(==) __lt(<) __le(<=)
访问的元方法: __index(查询) __newindex(修改)
都是 双下滑线哦
这些元方法的返回值 代表的是 两个table表 执行了该方法(即小括号里的运算符)后的结果