好的,既然你熟悉 C/C++/Python/Node.js,那 Lua 对你来说会非常容易上手。
把它想象成:一个语法更简洁、核心更小的 Python,其中唯一的复杂数据结构是 table(表)。
核心要点 (与你熟悉的语言对比):
动态类型: 和 Python/JS 一样。
nil: 类似 Python 的None或 JS 的null/undefined。在条件判断中,nil和false为假,其他都为真。table(表) 是万能的 table1 lua 5.3 table doc:- 可以当数组:
arr = {10, 20, 30}(索引从 1 开始!) - 可以当字典/对象:
obj = {name = "Lua", version = 5.4}或obj.name = "Lua" - 没有单独的类,面向对象通过
table+metatable(元表) 实现。
- 可以当数组:
索引从 1 开始: 这是最大的“坑”!
arr[1]是第一个元素。变量作用域: 默认全局。必须用
local声明局部变量 (非常重要!)。1x = 10 -- 全局 2local y = 20 -- 局部for循环在某些程度上,和while循环很相似,但是for循环可以更加简洁地表达中间累积的量
我们首先来学习
for这个循环语法,整体的格式如下:1for 临时变量名=开始值,结束值,步长 do 2 循环的代码 3end其中,
步长可以省略,默认为1临时变量名可以直接在代码区域使用(但不可更改),每次循环会自动加步长值,并且在到达结束值后停止循环下面举一个例子,我们计算从1加到100的结果:
1 2local result = 0 3 4for i=1,100 do 5 result = result + i 6end 7 8print(result)函数是一等公民: 和 Python/JS 一样,可以赋值给变量,作为参数传递,作为返回值。
1local function greet(name) 2 print("Hello, " .. name) -- `..` 是字符串连接符 3end 4local say_hi = greet 5say_hi("World")没有
++,--,+=,-=: 需要写i = i + 1。代码块由
end结束:if ... then ... elseif ... then ... else ... end,for ... do ... end,while ... do ... end,function ... end。注释: 单行
--, 多行--[[ ... --]]。面向对象 (Metatables): 这是 Lua 独特之处。
metatable允许你改变table的行为,比如重载操作符、实现继承。1local my_table = {} 2local my_metatable = { 3 __index = function(table_itself, key) 4 return "Key '" .. key .. "' not found" 5 end 6} 7setmetatable(my_table, my_metatable) 8print(my_table.non_existent_key) -- 输出: Key 'non_existent_key' not found协程 (Coroutines): 内建的轻量级线程,用于协作式多任务,类似 Python 的
generator或 JS 的async/await的一种底层实现。
一分钟代码示例感受:
1-- 变量和打印
2local name = "Lua User"
3local age = 30
4print("Hello, " .. name .. "! You are " .. age .. " years old.") -- `..` 字符串连接
5
6-- 表 (数组风格,索引从1开始!)
7local fruits = {"apple", "banana", "orange"}
8print(fruits[1]) -- 输出: apple
9
10-- 表 (字典/对象风格)
11local person = {name = "Alice", age = 25}
12print(person.name) -- 输出: Alice
13print(person["age"]) -- 输出: 25
14
15-- 条件语句
16if age > 18 then
17 print("Adult")
18else
19 print("Minor")
20end
21
22-- 循环
23for i = 1, 3 do -- 从 1 到 3 (包含3)
24 print("Fruit " .. i .. ": " .. fruits[i])
25end
26
27for key, value in pairs(person) do
28 print(key .. ": " .. value)
29end
30
31-- 函数
32local function add(a, b)
33 return a + b
34end
35local sum_result = add(5, 3)
36print("Sum: " .. sum_result) -- 输出: Sum: 8
37
38-- 记住:默认全局变量,一定要用 local!
关键区别总结:
table是唯一数据结构。- 索引从 1 开始。
local声明局部变量。- 用
metatable实现高级特性 (如 OOP)。
你已经掌握了更复杂的语言,Lua 对你来说就是小菜一碟。直接上手写代码,遇到问题查阅《Programming in Lua》(PIL) 官方文档即可。