2016-06-30 31 views
1

我有一個相當簡單的嵌套表Aurora64.Chat含有幾個功能(其中,主Aurora64類別處初始化,但我在這裏插入它的完整性):我對這個函數及其調用的方法做了什麼不正確的操作?

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("$1[Aurora 64]$2 " .. msg); 
    end 
} 

上述代碼失敗(checked with the Lua Demo)與下列:

輸入:14: '}' 預期的(關閉 '{' 在第3行)鄰近 'LogToSystem'

我已經TR它的功能及其用法(如果我刪除了函數和它的一次使用,代碼完美地編譯),並且我認爲這與我使用use of concatenation(事實並非如此)有關。

我在想我可能錯過了一件簡單的事,但我checked the documentation on functions和函數&其調用似乎寫得很好。

我究竟在做什麼錯在這裏?

+0

也許,'self:LogToSystem'應該在'Aurora64.Chat'表之外? –

+0

你對Lua表不熟悉吧?首先,你試圖在'Init'中包含'LogToSystem',這是不可能的,因爲它還沒有被聲明,甚至你將它聲明爲聊天表本身的一部分,而不是全局的。然後,你還試圖聲明'self:LogToSystem',可能認爲'self'是一種指向'Chat'本身的關鍵字。我看到你很困惑。嘗試解釋你想如何調用這些方法,我可能會幫助你。 – user6245072

+0

你還不清楚你想用'entityId'和其他'entity.id'來做什麼。 – user6245072

回答

1

你缺少LogToSystem前一個逗號,你需要不同的定義有點(加入self明確作爲參數):

end, 

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

這是不可能使用的形式obj:method與分配給匿名函數表字段;您只能使用function obj:method語法。

+0

謝謝,我認爲它會是那麼簡單(我從Lua中斷了兩年,從那時起我又學到了一些東西,所以很容易看出我變得困惑)。 – cybermonkey

+0

@cybermonkey如果我理解正確,還有其他一些錯誤。在'Init'中,您指的是'entityId'和'self:LogToSystem',兩者都不能照原樣使用。你需要用'Aurora64.Chat.entityId'替換'entityId',並使用'self:LogToSystem'函數'Init'必須包含'self'作爲第一個參數,並且必須使用冒號運算符來調用。 – user6245072

相關問題