Lua入门

Lua 基础速览

目录

  • 注释与输出
  • 变量与类型
  • 字符串
  • 运算符
  • 条件分支
  • 循环
  • 函数与返回值
  • 表(Table)
  • 作用域与局部变量
  • 其他常用技巧

注释与输出

  • 单行注释 --,多行注释 --[[ ... ]]
  • 使用 print() 打印:print("Hello Lua")

变量与类型

  • 声明不需类型;未赋值变量默认为 nil
  • 动态类型:同一变量可被赋予任意类型的值
  • 基本类型:nilnumberstringbooleantablefunctionuserdatathread
  • 查看类型:type(x)
  • 数值是双精度浮点;Lua 5.3 起区分整数/浮点,支持整数除法 //

示例:

lua 复制代码
a = nil
print(a)          -- nil
print(type(a))    -- string 类型的返回值
b = 123
c = "abc"
d = true

字符串

  • 字面量用单/双引号,长字符串用 [[ ... ]]
  • 连接运算符 ..,长度运算符 #str
  • 转义如 \n;中文在 UTF-8 下常为 3 字节/字符
  • 常用库方法:string.upper/lower/reverse/find/sub/gsub

示例:

lua 复制代码
local s = "aBcDeFg"
print("len", #s)                       -- 长度
print("concat", "foo" .. "bar")        -- 拼接
print(string.upper(s), string.lower(s))-- 大小写转换
print(string.reverse(s))               -- 反转
print(string.find(s, "cDe"))           -- 起止索引或 nil
print(string.sub(s, 3, 4))             -- 子串
print(string.gsub(s, "cD", "***"))     -- 替换

运算符

  • 算术:+ - * / % ^(幂运算),整数除法 //
  • 关系:> < >= <= == ~=
  • 逻辑:and or not(短路求值)
  • 连接:..
  • Lua 无自增自减 ++/--,无复合赋值 +=
  • Lua 5.3+ 位运算:& | ~ << >>

条件分支

  • 结构:if ... then / elseif ... then / else / end
  • 逻辑真值:除 nilfalse 外都为真(包括 0、空字符串)

示例:

lua 复制代码
local a = 9
if a > 5 then
  print("a > 5")
elseif a == 10 then
  print("a == 10")
else
  print("other")
end

循环

  • while:条件为真进入循环
  • repeat ... until:先执行后判断,条件为真结束
  • 数字 forfor i = start, finish, step do ... end(步长可省略,默认 1)
  • break 退出当前循环;Lua 无 continue

示例:

lua 复制代码
-- while
local num = 0
while num < 5 do
  print(num)
  num = num + 1
end

-- repeat-until
num = 0
repeat
  print(num)
  num = num + 1
until num > 5

-- for,含自定义步长
for i = 2, 5, 1 do
  print(i)
end

函数与返回值

  • 定义:function fname(args) ... end
  • 多返回值:return a, b
  • 变长参数:function f(a, b, ...) end... 可配合 {...} 捕获
  • 支持闭包:内部函数可访问外部局部变量

示例:

lua 复制代码
local function add(x, y)
  return x + y
end

local function head_and_tail(first, ...)
  return first, {...} -- 其余参数打包为表
end

local function make_counter()
  local n = 0
  return function()
    n = n + 1
    return n
  end
end

表(Table)

  • 关联/数组统一用表:{} 创建
  • 访问:t.keyt["key"]
  • 插入/删除:table.insert(t, v)table.remove(t, idx)
  • 遍历:ipairs(顺序下标),pairs(任意键值)
  • 浅拷贝示例:local t2 = {table.unpack(t)}(Lua 5.2+)

示例:

lua 复制代码
local t = {1, 2, 3, name = "lua"}
print(t[1], t.name)
for i, v in ipairs(t) do print(i, v) end
for k, v in pairs(t) do print(k, v) end

作用域与局部变量

  • 默认全局;使用 local 声明局部,优先使用 local 降低污染

示例:

lua 复制代码
local x = 10
do
  local x = 20 -- 仅在块内有效
  print(x)
end
print(x)

其他常用技巧

  • 转换:tostring(x)tonumber("123")
  • 数学:math.floor/ceil/abs/sqrt/random
  • 安全索引:访问可能为 nil 的字段前先判空,或使用局部变量缓存
  • 调试:print 快速查看;复杂结构可用 vim.inspect 或第三方 inspect
相关推荐
SmartRadio2 分钟前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信 (采用Arduino代码框架)
开发语言·智能手机·esp32·长距离wifi
njsgcs12 分钟前
solidworks自动标注折弯4 无向图 c#
开发语言·c#·solidworks
c++之路25 分钟前
C++ 多线程
开发语言·c++
CHANG_THE_WORLD30 分钟前
<Fluent Python > Unicode 文本与字节
开发语言·python
AI人工智能+电脑小能手35 分钟前
【大白话说Java面试题】【Java基础篇】第20题:HashMap在计算index的时候,为什么要对数组长度做减1操作
java·开发语言·数据结构·后端·面试·哈希算法·hash-index
凯瑟琳.奥古斯特36 分钟前
Bootstrap快速上手指南
开发语言·前端·css·bootstrap·html
leo__52040 分钟前
单载波中继系统资源分配算法MATLAB仿真程序
算法·matlab·unity
我就是妖怪1 小时前
Kimi K2.6 智能效果实测与能力全景展示
开发语言
中二痞1 小时前
下载Python 版本,环境变量变更以及PyCharm更换python版本
开发语言·python·pycharm
故事和你911 小时前
洛谷-算法2-3-分治与倍增5
开发语言·数据结构·c++·算法·动态规划·图论