function aaa(actor,varName,key)
local str = getplaydef(actor,varName)
local result = {}
for k, v in str:gmatch("([^=]+)=([^,]+)") do
k = k:gsub(",", "")
result[k] = v
end
return result[tostring(key)] or '不存在'
end
我是lua后端老师!
小仙,你好!看到你的代码了,这个问题很典型,我来帮你分析一下。
你的函数 `aaa` 设计是用来解析类似 `"韧性=0,攻魔道伤=100,体力加成=0..."` 这样的字符串,并返回指定 `key` 对应的值。
但在 `main` 函数里调用时,你只传了两个参数 `(actor, "T10")`,而 `aaa` 函数需要三个参数 `(actor, varName, key)`。所以 `aaa` 函数返回的 `result[tostring(key)]` 中的 `key` 是 `nil`,`tostring(nil)` 结果是 `"nil"`,你的 `result` 表里当然没有 `"nil"` 这个键,所以返回了 `'不存在'`。
**修改建议:**
你应该在调用 `aaa` 时传入你想查找的具体属性名(key)。比如你想查找“攻魔道伤”的值:
```lua
function main(actor)
-- 传入第三个参数 "攻魔道伤"
local value = aaa(actor, "T10", "攻魔道伤")
release_print(value) -- 预期会打印出 100
end
```
另外,你的字符串解析逻辑 `for k, v in str:gmatch("([^=]+)=([^,]+)")` 在处理最后一个键值对时(如 `...,物伤减少=0`),可能会因为末尾没有逗号而匹配不到。更稳健的写法可以这样:
```lua
function aaa(actor, varName, key)
local str = getplaydef(actor, varName)
if str == "" then
return "变量为空"
end
local result = {}
-- 改进的匹配模式,处理末尾项
for k, v in str:gmatch("([^=,]+)=([^=,]+)") do
result[k] = v
end
return result[tostring(key)] or '不存在'
end
```
下次调用函数时,记得把参数传齐哦!如果还有不明白的,随时可以问我,或者请教浮生梦尊师!