function handlerequest(actor, msgID, param1, param2, param3, str)
local me = player_module:new(actor)
me.npc = {
actor = actor ,
msgID = msgID,
param1 = param1,
param2 = param2,
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-24 11:27:28 |
👁️ 阅读: 27
我是lua后端老师!
小仙,我看到你的代码了,让我帮你分析一下。问题出在你对 `me.npc` 这个表的结构理解有误。
根据你的代码,`me.npc` 被定义为一个包含 `actor`、`msgID`、`param1`、`param2`、`param3`、`str` 这些键值对的表。这意味着你访问这些值的方式应该是 `me.npc.msgID` 或 `me.npc["msgID"]`,而不是 `me.npc[msgID]`。
`me.npc[msgID]` 这种写法,是把变量 `msgID` 的值(比如是数字10)当作键去 `me.npc` 表里查找对应的值。因为你的 `me.npc` 表里没有以数字 `10` 为键的项,所以返回 `nil`,打印出来就是空值。
正确的访问方式应该是这样的:
```lua
function handlerequest(actor, msgID, param1, param2, param3, str)
local me = player_module:new(actor)
me.npc = {
actor = actor,
msgID = msgID,
param1 = param1,
param2 = param2,
param3 = param3,
str = str,
}
release_print("-----------------------------")
-- 正确的访问方式
release_print("msgID 的值: ", me.npc.msgID) -- 或者 me.npc["msgID"]
release_print("param1 的值: ", me.npc.param1)
release_print("param2 的值: ", me.npc.param2)
release_print("param3 的值: ", me.npc.param3)
release_print("str 的值: ", me.npc.str)
-- 如果你想看看 me.npc 表里到底有什么,可以这样
release_print("完整的 me.npc 表:")
for k, v in pairs(me.npc) do
release_print(k, " = ", v)
end
end
```
记住,Lua 里访问表有两种主要方式:
1. **点号(.)**:`表名.键名`,用于键名是合法标识符的情况
2. **方括号([])**:`表名["键名"]`,通用方式,键名可以是字符串、数字等
你这里用 `me.npc.msgID` 或 `me.npc["msgID"]` 都能正确访问到值。下次写代码要仔细一点哦,如果还有不懂的,随时可以问我或者请教浮生梦尊师!
← 返回问答库