1. 输出日志
print(“Hello,Lua!”)
2. 注释
单行注释: -- 两个减号
多行注释:
1
2
3
4
| --[[
多行注释内容1
多行注释内容2
--]]
|
3. 变量
Lua中的变量全是全局变量,哪怕是语句块或是函数里,除非用local显式声明为局部变量。
局部变量的作用域为从声明位置开始到所在语句块结束。 变量的值默认为 nil。
1
2
3
4
5
6
7
| a = 5 -- 全局变量
local b = 5 -- 局部变量
function foo()
c = 5 -- 全局变量
local d = 6 -- 局部变量
end
|
支持多值赋值:
4. 运算符
算数运算:
+、-、*、/、%、^(乘幂,例如 2^2 值为 4)、-(负号)
关系运算:
==、~=(不等于)、>、<、>=、<=
逻辑运算:
and、or、not
其他运算:
..
连接字符串
#
取长度
1
2
3
4
5
| a = "Hello"
print(#a) ---> 5
b = {"aaa", "bbb"}
print(#b) ---> 2
|
5. 数据类型
数据类型 | 描述 |
---|
nil | 是一个空值 |
boolea | false、true |
number | 表示双精度的浮点数 |
string | 字符串,由一堆双引号或者单引号包围 |
function | 由C或者Lua编写的函数 |
userdate | 表示任意存储在变量中的C数据结构 |
thread | 表示执行的独立线程,用于执行协同程序 |
table | Lua中的表是一个关联数组,数组的索引可以是数字或者字符串。最简单的表是{},表示是一个空表 |
6. 字符串
1
2
3
4
5
6
7
8
9
10
11
| string1 = "this is string1"
string2 = 'this is string2'
string3 = [[
<html>
<head>
</head>
<body>
<a href="http://www.qq.com/">QQ</a>
</body>
</html>
]]
|
字符串拼接: 两个点 ..
1
2
3
4
5
6
7
8
9
10
| string4 = string1 .. "abc" .. string2
print("a" .. 'b')
-- ab
print("a" .. 456)
-- a456
print("123.4" + 4)
-- 127.4
|
7. 表
是Array,也是Map。
1
2
3
| tab1 = {}
tab2= {“a", "b","c"}
tab2["key2"] = "val2"
|
下标从1开始
8. 函数
1
2
3
| function foo(name)
print("hello, " .. name)
end
|
匿名函数, 函数也是个变量
1
2
3
| abc = function(name)
print("hello, " .. name)
end
|
可以有多返回值
1
2
3
4
5
| function multival()
return 1, 2
end
f, g = multival()
|
9. 条件判断
1
2
3
4
| if(布尔表达式)
then
-- 语句块
end
|
1
2
3
4
5
6
7
8
9
| if(布尔表达式)
then
--语句块
elseif(布尔表达式)
then
--语句块
else
--语句块
end
|
10. 循环
1
2
3
4
| while(布尔表达式)
do
-- 语句块
end
|
1
2
3
| repeat
-- 语句块
until(布尔表达式)
|
1
2
3
4
| for var=exp1,exp2,exp3 -- 初值,终值,步长
do
-- 语句块
end
|
1
2
3
4
5
| a = {"one", "two", "three"}
for i, v in ipairs(a)
do
print(i, v)
end
|
11. 面向对象
使用 table + function 的方式模拟面向对象
冒号语法糖
冒号只是隐去了第一个参数,自动定义和传递 self 变量。
原始写法:
1
2
3
4
5
6
| girl = {money = 200}
function girl.goToMarket(girl ,someMoney)
girl.money = girl.money - someMoney
end
girl.goToMarket(girl ,100)
print(girl.money)
|
函数调用时使用冒号:
1
2
3
4
5
6
| boy = {money = 200}
function boy.goToMarket(self ,someMoney)
self.money = self.money - someMoney
end
boy:goToMarket(100)
print(boy.money)
|
函数定义时使用冒号:
1
2
3
4
5
6
| boy = {money = 200}
function boy:goToMarket(someMoney)
self.money = self.money - someMoney
end
boy:goToMarket(100)
print(boy.money)
|
12. 注释类型声明
方便编辑器自动提示使用
1
2
| ---@type AActor
local myActor = nil
|
1
2
3
| ---@class AMyActor : AActor
---@field public ActorName string
local AMyActor = {}
|
1
2
3
4
| ---@param bEnablePreviewMode boolean
---@return boolean
function SwitchPreviewMode(bEnablePreviewMode)
end
|