把字符串当表用下标访问:学员写 name[1] 想取第一个字符,直接报 attempt to index a string value——Lua 的字符串不是字符数组,不支持下标访问,取字符必须走 string 库。从 C 或 JS 转来的学员反复在这个点上摔跤。错误场景:
local name = "裁决之杖"
print(name[1])
输出 nil?不——直接报错 attempt to index,连 nil 都不给。
取单字符用 string.sub,取字节码用 string.byte,两者按需选择。规范写法。示例代码如下:
local name = "裁决之杖"
local first = string.sub(name, 1, 1)
local code = string.byte(name, 1)
print(first, code)
sub 返回字符(中文一个字占 3 字节),byte 返回首字节的数值(判大小写、做校验和用)。示例代码如下:
local function isUpperCh(ch)
local b = string.byte(ch)
return b >= 65 and b <= 90
end
三步验证:name[1] 复现 attempt to index 报错;string.sub(name, 1, 3) 取出"裁"字(中文按字节切 3 位);string.byte 取首字节值与 ASCII 表核对。
逐字符遍历的正确姿势是 sub 加循环,而不是下标递增:遍历开销对比 byte 直接读数值更快,判内容用 sub、判编码用 byte。示例代码如下:
local function countUpper(s)
local n = 0
for i = 1, #s do
local b = string.byte(s, i)
if b >= 65 and b <= 90 then
n = n + 1
end
end
return n
end
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
一、一行代码拆解:POOL = POOL + cost 0.5 —— 奖池滚存的核心:每次抽取把成本的一半注入奖池,未中滚存…
一、隐蔽陷阱:强化费用每星固定 500 金,玩家三天点到满星 15 星;成本按 2 的幂增长(500 乘 2 的星减一次方)…
一、线上事故:组队匹配全服一张等待表逐个比对等级差,300 人同时排队时每次匹配 300 次比较还配错段;按等级段分桶,同段…
一、抛坑提问:回收价按原价五折一口价,强化 12 的神装与白板同价,玩家宁可分解;回收价等于原价乘折旧系数,强化、耐久、稀有…
一、抛坑提问:50×50 城墙格子用嵌套表存,两层寻址多层开销——压平成一维数组,idx = (y-1) 50 + x,一次…
一、一行代码拆解:st = {n = st.n + 1, sum = st.sum + v} —— 计数、求和、最大、最小四…