Roblox调用table.remove报错:参数2期望数字类型实际为字符串
报错根因
table.remove的第二个参数必须传入待删除元素的数字类型索引,你的代码中choice变量存储的是对应索引位置的字符串内容,不是索引本身,传入字符串就触发了number expected, got string的类型错误。
除此之外代码还有两个隐藏bug:
- 删除第一个元素后重新随机得到的新
choice没有赋值给文本标签,对应内容不会显示 - 没有做表为空的边界判断,当所有字符串被移除后,
math.random(1, #textTable)会等价于math.random(1, 0),触发参数范围错误
修复后代码
local textTable = { "What is this?", "What is that?", "What would match this statement?", "Pick the option that would match the image." } while wait(2) do -- 表为空时终止循环,避免边界报错 if #textTable == 0 then break end -- 先生成随机数字索引,再通过索引取对应文本 local randomIdx = math.random(1, #textTable) local choice = textTable[randomIdx] script.Parent:WaitForChild("ComputerGui").Game1.TextLabel.Text = choice -- 传入数字索引完成删除,不要传字符串内容 table.remove(textTable, randomIdx) end
如果你的预期是每次循环连续展示两个不重复的文本,只需要在第一次删除操作后,判断表长度不为0时,再走一遍「生成随机索引-取文本赋值-按索引删除」的流程即可,原代码里第二次随机只给choice赋值没同步更新文本组件,属于无效逻辑。
内容的提问来源于stack exchange,提问作者TrulyBlue
相关产品推荐
相关产品推荐

