t[1] 与 t["1"] 是两个不同的键——数字键进数组区、字符串键进哈希区,混用后 pairs 遍历出两个"1",按 #t 数长度又对不上。学员以为引号可有可无,实际决定了键的类型。错误场景:
local t = {}
t[1] = "数字键"
t["1"] = "字符串键"
print(t[1], t["1"], #t)
输出 数字键 字符串键 1——两个键并存互不覆盖,#t 只统计数字键。
键的类型统一约定:序列数据用数字键,标签类数据用字符串键,永不混用。规范写法。示例代码如下:
local t = {}
t[1] = "数字键"
t["1"] = "字符串键"
for k, v in pairs(t) do
print(type(k), v)
end
输出 number 数字键 与 string 字符串键——遍历能看清两种键的并存状态。
三步验证:写入两个键后 #t 与 pairs 输出对照,确认混用状态;统一改成数字键后 #t 恢复正确;再验证 t["1"] 无法用点语法访问(t.1 是语法错误)——字符串键必须方括号。
tonumber 的转换时机决定用哪个键:外部输入先归一为数字键,同名异型的坑从此消失。示例代码如下:
local t = {}
local raw = "2"
t[tonumber(raw)] = "归一键"
print(t[2], t["2"])
输出 归一键 与 nil——统一键型后,同值异型键不再分裂。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法】 一、隐蔽陷阱 对比两份任务记录的"共同路线":要求连续的子串可以逐位比对,允许跳过中间步骤的最长公共子序列却没法直…
【游戏】 一、业务场景 新玩家出门就挨打,图文教学没人看,第二天流失率居高不下。训练营上线:三个分阶关卡(走位、连招、节奏)…
【语法】 一、隐蔽陷阱 五只猴子分桃,每来一只把桃分成 5 份多 1 个扔掉再拿走一份。正向从 1 个桃开始试,试到几千个才…
【游戏】 一、业务场景 满级玩家装备毕业后一周流失,进度条走到头没了盼头。渡劫玩法上线:80 级可挑战三重天劫,全通获得渡劫…
【语法】 一、隐蔽陷阱 63 分找零用面额 1、5、10、25 的硬币,贪心取最大面额 6 枚搞定;可换成面额 1、3、4 …
【游戏】 一、业务场景 会长每天手动发福利、清名单、盯报名,帮务占满游戏时间,连着三周漏发福利被帮众催。帮会管家上线:每周 …