惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
O
OpenAI News
V
V2EX
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
S
Schneier on Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
小众软件
小众软件
L
LINUX DO - 热门话题
C
Cybersecurity and Infrastructure Security Agency CISA
博客园 - Franky
Security Latest
Security Latest
S
SegmentFault 最新的问题
Project Zero
Project Zero
Spread Privacy
Spread Privacy
K
Kaspersky official blog
J
Java Code Geeks
V
Vulnerabilities – Threatpost
C
Cisco Blogs
C
CERT Recently Published Vulnerability Notes
月光博客
月光博客
T
The Exploit Database - CXSecurity.com
L
Lohrmann on Cybersecurity
人人都是产品经理
人人都是产品经理
博客园 - 三生石上(FineUI控件)
Scott Helme
Scott Helme
WordPress大学
WordPress大学
量子位
T
Threat Research - Cisco Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
宝玉的分享
宝玉的分享
Hugging Face - Blog
Hugging Face - Blog
AWS News Blog
AWS News Blog
Help Net Security
Help Net Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Simon Willison's Weblog
Simon Willison's Weblog
S
Secure Thoughts
博客园 - 【当耐特】
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
V
Visual Studio Blog
Last Week in AI
Last Week in AI
T
Tailwind CSS Blog
腾讯CDC
Cyberwarzone
Cyberwarzone
IT之家
IT之家
GbyAI
GbyAI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
云风的 BLOG
云风的 BLOG
T
Troy Hunt's Blog
D
Docker

飞飞爱折腾 - 宋飞的个人网站

mitmproxy HTTP 代理工具 客制化键盘 USB to USB 模块 FastCopy : Windows上最快的复制/备份软件 我的数据存储和备份 忆高震东先生:爱自己的孩子是人,爱别人的孩子是神 查看 Windows 中的 dll 依赖 UE 日志配置 UE 引擎配置文件 UE 解析启动命令行参数
Lua 语言入门
songfei · 2024-05-27 · via 飞飞爱折腾 - 宋飞的个人网站

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是一个空值
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开始

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