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
相关推荐
zxy28472253012 小时前
C#的视觉库Halcon入门示例
c#·图像识别·halcon·机器视觉
曼巴UE52 小时前
UE5 C++ 动态多播
java·开发语言
steins_甲乙3 小时前
C++并发编程(3)——资源竞争下的安全栈
开发语言·c++·安全
请一直在路上3 小时前
python文件打包成exe(虚拟环境打包,减少体积)
开发语言·python
luguocaoyuan3 小时前
JavaScript性能优化实战技术学习大纲
开发语言·javascript·性能优化
禁默4 小时前
“零消耗”调用优质模型:AI Ping结合Cline助我快速开发SVG工具,性能与官网无异
开发语言·php
CSDN_RTKLIB4 小时前
代码指令与属性配置
开发语言·c++
上不如老下不如小4 小时前
2025年第七届全国高校计算机能力挑战赛 决赛 C++组 编程题汇总
开发语言·c++
雍凉明月夜4 小时前
c++ 精学笔记记录Ⅱ
开发语言·c++·笔记·vscode
独自破碎E4 小时前
加油站环路问题
java·开发语言·算法·leetcode