在Lua中将用户数据存储在表中的暂存库

所以我有一个想法,但是初步考虑似乎不是一个好的想法。我想在外部表中(通过require调用)存储UserData作为脚本生命周期中的暂存库。

我正在寻找实现这一点的方法,但我认为在全局环境中存储UserData可能会有问题。有人能指出这种方法的任何缺陷吗?或提供更好的建议?

外部(集中式)函数-在脚本执行期间使用'require'加载:

--Chat.lua
--位置: Scripts/Globals/Custom/Functions/Chat

Convo    = 0xD
Special  = 0x1F

TempUserData = {}
TempTargetData = {}

function Show (Message, Display, Color, VAR1, VAR2, VAR3, VAR4, VAR5)

    local User = TempUserData[1]
    local Name = Display and TempTargetData[1]..":  " or "  "
    Color = Color or Convo
    VAR1  = VAR1  or nil
    VAR2  = VAR2  or nil
    VAR3  = VAR3  or nil
    VAR4  = VAR4  or nil
    VAR5  = VAR6  or nil

    if (VAR1) then
        User:PrintToUser(string.format(Name..Message, VAR1, VAR2, VAR3, VAR4, VAR5), Color)
    else
        User:PrintToUser(Name..Message, Color)
    end

end

主要脚本:

---------------------------------------------------------------
package.loaded["Scripts/Globals/Custom/Functions/Chat"] = nil
require("Scripts/Globals/Custom/Functions/Chat")
---------------------------------------------------------------

local function foo (VAR1)

    Show("Message")
    Show("Message",true,Special,VAR1)
    --Stuff

end

local function bar (VAR2)

    Show("Message")
    Show("Message",true,Special,VAR2)
    --Stuff

end

function onTrigger (User, VAR1, VAR2, VAR3) --开始脚本

    table.insert(TempUserData, User)
    table.insert(TempTargetData, "System")
    --Stuff

end

我想这样做的原因是:

  1. User:PrintToUser不是我的函数。它可能在某个时候发生变化或者被重命名,由于我有很多文件使用它,在一个地方进行更改并且效果可以影响到我的自定义脚本,这是吸引我的地方。

  2. 一些消息可能会很长,在函数调用中将用户和目标行内显示只会不断地添加更多的空间。

  3. 最终结果更短更清晰,从而使在大型脚本中更易于阅读。对我来说,也更容易进行调试(我有多少次将PrintToUser拼写为printToUser...)

与此相反:

User:PrintToUser(string.format("消息%s,%s", VAR1, VAR2), 0xD)

它可能更简洁:

Show("消息%s,%s", true, Convo, VAR1, VAR2) -- 带变量

或者

Show("消息",true) -- 默认颜色显示“系统”
Show("消息") -- 不显示“系统”,但仍具有默认颜色

对于此,我有两个问题:

  1. 基于上面的代码,如果有多个人同时使用相同的脚本,我会遇到问题吗?(即UserData在某种程度上被混合在一起,或使用全局变量)。

  2. 这种方式重新定义函数会有任何性能降低吗?或者因为每次存储、检索、删除UserData表而导致性能降低?(要使用200多人)

点赞