2013-10-10 77 views
3

,所以我有這樣的LUA文件類似:Lua解釋,不必導入文件兩次的全部功能

x = { __index = x} 

constructor = function() 
    local o = {} 
    return setmetatable(o,x) 
end 

function x:print() 
    print("hello world") 
end 

我鍵入以下到interpretr:

dofile "file.lua" 
a = constructor() 
a:print() --error attempt to call method 'print' (a nil value) 

dofile "file.lua" 
a = constructor() 
a:print() -- hello world 

的方法工作的第二次我導入文件,但不是第一次。爲什麼是這樣? 我試着改變順序(把構造函數放在最後),它是一樣的。

回答

3

第一次x爲零。它被定義並在第二次使用。您需要編寫x = {}; x.__index = x

+0

謝謝!那是做 –

+0

@phatpat如果這個答案解決了你的問題,請接受它。這就是SO的工作原理,並有助於保持SO質量。這是所謂的「謝謝!」的方式。 –