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是一个空值
booleafalse、true
number表示双精度的浮点数
string字符串,由一堆双引号或者单引号包围
function由C或者Lua编写的函数
userdate表示任意存储在变量中的C数据结构
thread表示执行的独立线程,用于执行协同程序
tableLua中的表是一个关联数组,数组的索引可以是数字或者字符串。最简单的表是{},表示是一个空表

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
songfei 支付宝支付宝
songfei 微信微信
0%