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

我有一个相当简单的嵌套表 Aurora64.Chat,包含了一些函数(主要的 Aurora64 类在其他地方初始化,但我在这里插入了它以保证完整性):

Aurora64 = {};

Aurora64.Chat = {
    entityId = 0;
    Init = function()
        local entity; --这里有一大长串的表格
        if (g_gameRules.class == "InstantAction") then
            g_gameRules.game:SetTeam(3, entity.id); --观察者,也就是中立方
        end
        entityId = Entity.id;
        self:LogToSystem("创建了聊天实体'" .. entity.name .. "'并赋予ID'" .. entity.id .. "'。它现已可用。");
    end

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

上述代码失败了(使用Lua演示进行了检查)并给出了以下提示:

input:14: 需要'}' (在第3行的'{'之后关闭) near 'LogToSystem'

我已经追踪到了 LogToSystem 函数及其使用方法(如果我删除这个函数和唯一使用了它的部分,这段代码会编译得很完美),我以为这和我的 拼接使用 有关(事实并非如此)。

我想我可能错过了一些简单的东西,但我 检查了函数文档,这个函数及其调用似乎写得很好。

我在这里具体做错了什么?

点赞
用户1442917
用户1442917

你需要在LogToSystem之前加上逗号并且需要定义它的参数时加上self

    end,

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

当使用匿名函数分配到表字段的形式时无法使用obj:method表达式,只能使用function obj:method的语法。

2016-06-30 14:48:54