function aaa(actor,varName,key)
local str = getplaydef(actor,varName)
local result = {}
for k, v in string.gmatch(str, "([^=]+)=([^,]+)") do
k = k:gsub(",", "")
result[k] = v
end
return result[tostring(key)] or ""
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-30 13:44:26 |
👁️ 阅读: 14
我是lua后端老师!
小仙,你这个问题很典型,是字符串解析时的一个小疏忽。让我来帮你看看。
你的 `T10` 变量里存储的字符串是 `暴击伤害=0,暴击概率=0,攻击伤害=0,攻击加成=0,忽视防御=0,暴击抵抗=0,韧性=0,伤害减少=0,体力加成=0,伤害反弹=0`。
你的 `aaa` 函数设计是需要传入三个参数:`actor`, `varName`, `key`。其中 `key` 是你想从 `T10` 这个字符串里提取的某个属性名,比如 `"暴击伤害"`。
但是你在调用的时候,只传了两个参数:`aaa(actor,"T10")`。这意味着第三个参数 `key` 是 `nil`。
在你的函数里,最后一行是 `return result[tostring(key)] or ""`。因为 `key` 是 `nil`,`tostring(nil)` 的结果是字符串 `"nil"`。而你的 `result` 字典里,键是 `"暴击伤害"`、`"暴击概率"` 这些,并没有一个键是 `"nil"`,所以 `result["nil"]` 是 `nil`,最终函数返回了 `or ""` 后面的空字符串 `""`。
所以 `release_print(value)` 打印出来就是空的。
**解决方法:**
调用函数时,需要传入你想查询的具体属性名作为第三个参数。
```lua
-- 假设你想获取“暴击伤害”这个属性的值
local value = aaa(actor, "T10", "暴击伤害")
release_print(value) -- 现在应该会打印出 "0"
```
或者你想获取“攻击加成”:
```lua
local value = aaa(actor, "T10", "攻击加成")
release_print(value) -- 打印 "0"
```
下次调用自己封装的函数时,一定要把参数传全哦,不懂的可以随时问我,或者请教浮生梦尊师!
我是lua后端老师!
小仙,你这个问题很典型,是字符串解析时的一个小疏忽。让我来帮你看看。
你的 `T10` 变量里存储的字符串是 `暴击伤害=0,暴击概率=0,攻击伤害=0,攻击加成=0,忽视防御=0,暴击抵抗=0,韧性=0,伤害减少=0,体力加成=0,伤害反弹=0`。
你的 `aaa` 函数设计是需要传入三个参数:`actor`, `varName`, `key`。其中 `key` 是你想从 `T10` 这个字符串里提取的某个属性名,比如 `"暴击伤害"`。
但是你在调用的时候,只传了两个参数:`aaa(actor,"T10")`。这意味着第三个参数 `key` 是 `nil`。
在你的函数里,最后一行是 `return result[tostring(key)] or ""`。因为 `key` 是 `nil`,`tostring(nil)` 的结果是字符串 `"nil"`。而你的 `result` 字典里,键是 `"暴击伤害"`、`"暴击概率"` 这些,并没有一个键是 `"nil"`,所以 `result["nil"]` 是 `nil`,最终函数返回了 `or ""` 后面的空字符串 `""`。
所以 `release_print(value)` 打印出来就是空的。
**解决方法:**
调用函数时,需要传入你想查询的具体属性名作为第三个参数。
```lua
-- 假设你想获取“暴击伤害”这个属性的值
local value = aaa(actor, "T10", "暴击伤害")
release_print(value) -- 现在应该会打印出 "0"
```
或者你想获取“攻击加成”:
```lua
local value = aaa(actor, "T10", "攻击加成")
release_print(value) -- 打印 "0"
```
下次调用自己封装的函数时,一定要把参数传全哦,不懂的可以随时问我,或者请教浮生梦尊师!
← 返回问答库