我对这个函数及其调用的方法做错了什么?

What am I doing incorrectly to my approach to this function & its call?

我有一个相当简单的嵌套 table Aurora64.Chat 包含几个函数(其中主要的 Aurora64 class 在别处初始化但为了完整性我将它插入这里):

Aurora64 = {};

Aurora64.Chat = {
    entityId = 0;
    Init = function()
        local entity; --Big long table here.
        if (g_gameRules.class == "InstantAction") then
            g_gameRules.game:SetTeam(3, entity.id); --Spectator, aka neutral.
        end
        entityId = Entity.id;
        self:LogToSystem("Created chat entity '" .. entity.name .. "' with ID '" .. entity.id .. "'. It is now available for use.");
    end

    LogToSystem = function(msg)
        System.LogAlways("[Aurora 64] " .. msg);
    end
}

以上代码失败 (checked with the Lua Demo) 并出现以下情况:

input:14: '}' expected (to close '{' at line 3) near 'LogToSystem'

我已经追踪到 LogToSystem 函数及其用法(如果我删除该函数并使用一次,代码编译完美),我认为这与我的有关使用 use of concatenation(不是)。

我想我可能漏掉了一些简单的东西,但我 checked the documentation on functions 函数及其调用似乎写得正确。

我到底做错了什么?

您在 LogToSystem 之前缺少一个逗号,您需要稍微不同地定义它(通过添加 self 作为显式参数):

    end,

    LogToSystem = function(self, msg)
        System.LogAlways("[Aurora 64] " .. msg);
    end
}

无法将 obj:method 形式与分配给 table 字段的匿名函数一起使用;您只能使用 function obj:method 语法。