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

推荐订阅源

Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
SegmentFault 最新的问题
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Attack and Defense Labs
Attack and Defense Labs
F
Full Disclosure
Vercel News
Vercel News
N
News | PayPal Newsroom
The GitHub Blog
The GitHub Blog
H
Hacker News: Front Page
H
Heimdal Security Blog
P
Privacy International News Feed
博客园 - 司徒正美
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cisco Blogs
L
Lohrmann on Cybersecurity
D
Docker
Recent Announcements
Recent Announcements
Security Archives - TechRepublic
Security Archives - TechRepublic
人人都是产品经理
人人都是产品经理
C
CXSECURITY Database RSS Feed - CXSecurity.com
P
Proofpoint News Feed
T
Tailwind CSS Blog
C
Check Point Blog
博客园 - 叶小钗
Google Online Security Blog
Google Online Security Blog
Martin Fowler
Martin Fowler
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
S
Secure Thoughts
博客园 - Franky
博客园_首页
阮一峰的网络日志
阮一峰的网络日志
P
Palo Alto Networks Blog
Latest news
Latest news
量子位
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
The Cloudflare Blog
Last Week in AI
Last Week in AI
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Cyberwarzone
Cyberwarzone
小众软件
小众软件
Cisco Talos Blog
Cisco Talos Blog
Hacker News: Ask HN
Hacker News: Ask HN
T
Threatpost
T
Tenable Blog
P
Privacy & Cybersecurity Law Blog
WordPress大学
WordPress大学

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

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