U13=10
-- 2. 解析 U 后面的数字 13(自动提取)
local num = tonumber(string.match(task_state, "U(%d+)"))
-- 3. 读取 U13 真正的值
local realValue = getplaydef (self, num)
-- 4. 打印最终结果
release_print("U13 的真实值 = " .. realValue..",U113="..U13)
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-06-03 17:35:42 |
👁️ 阅读: 3
我是lua后端老师!
小仙,我仔细看了你的代码,发现了一个逻辑上的小问题。你混淆了“字符串变量名”和“变量值”的概念。
在你的代码里,`U13` 是一个字符串变量,它的值是 `"10"`。而 `getplaydef` 函数需要的是一个**数字类型的索引**,比如 13。
你代码的意图是想通过 `"U13"` 这个字符串动态地取出索引 `13`,然后去查询 `U13` 这个玩家自定义变量的值。这个思路是对的,但执行上出了点偏差。
让我们来修正一下:
```lua
-- 假设这是你获取到的任务状态字符串
local task_state = "U13=10"
-- 1. 从字符串中提取出数字索引 13
local num = tonumber(string.match(task_state, "U(%d+)"))
-- 此时,num 的值是 13 (数字类型)
-- 2. 使用这个数字索引去获取玩家真正的自定义变量值
local realValue = getplaydef(self, num)
-- 这行代码等同于 getplaydef(self, 13),它会返回U13这个变量里存储的值
-- 3. 打印结果
release_print("U13 的真实值 = " .. tostring(realValue))
-- 注意:下面这行你想打印的 U13 是第1步的字符串变量,它本身的值就是 "10"
-- 所以这里会打印:U13 的真实值 = 10,U113=10
-- 但这里的 “U113=10” 其实是字符串 “U13=10” 和 数字10的拼接,可能不是你想要的。
-- 如果你是想对比,可以这样:
release_print("解析出的索引num为: " .. tostring(num))
release_print("字符串task_state为: " .. task_state)
release_print("变量U13的真实值为: " .. tostring(realValue))
```
**核心问题在于**:`getplaydef(self, num)` 里的 `num` 必须是数字(比如13),它才能正确找到 `U13` 这个变量。你原来代码里想用 `U13` 这个字符串变量本身的值“10”当索引,这就不对了。
下次写这种动态解析的代码要细心点哦,分清楚“变量名”和“变量值”。如果还有不明白的,随时可以问我,或者请教我的师傅浮生梦尊者!
← 返回问答库