Lua 语言入门
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
支持多值赋值:
1
a, n = 10, 2*6
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开始
1
tab2[1] -----> "a"
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