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
相关推荐
金銀銅鐵2 天前
浅解 JUnit 4 第十一篇:@Before 注解和 @After 注解如何发挥作用?
junit·单元测试
Scout-leaf3 天前
WPF新手村教程(三)—— 路由事件
c#·wpf
用户298698530143 天前
程序员效率工具:Spire.Doc如何助你一键搞定Word表格排版
后端·c#·.net
金銀銅鐵3 天前
浅解 JUnit 4 第十篇:方法上的 @Ignore 注解
junit·单元测试
mudtools4 天前
搭建一套.net下能落地的飞书考勤系统
后端·c#·.net
玩泥巴的5 天前
搭建一套.net下能落地的飞书考勤系统
c#·.net·二次开发·飞书
唐宋元明清21885 天前
.NET 本地Db数据库-技术方案选型
windows·c#
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
lindexi5 天前
dotnet DirectX 通过可等待交换链降低输入渲染延迟
c#·directx·d2d·direct2d·vortice
feifeigo1235 天前
matlab画图工具
开发语言·matlab