2017-04-03 9 views
1

내가하려는 것은; 모듈을 사용하여 두 개의 별개의 별개의 테이블을 만들지 만 일어날 것으로 보이는 것은 있습니다. 만약 내가 이미 '요구'를 사용했다면 이전에 대한 참조를 줄 것입니다. 정말로 원하는 것은 모듈의 값/값입니다. 1) 때문에 'dofile'을 사용할 수 없습니다. 상대 경로와 2)를 사용해야합니다. 코로나에서 안드로이드 용으로 제작 중이며 'dofile'이 .apk와 잘 작동하지 않는다는 것을 이해합니다.루아 'require'duplicating table

여기 내 코드입니다.

은이 %에서 cd ​​%/모듈 내 main.lua

foo = require('modules.myModule') 
bar = require('modules.myModule') 

bar:changeName() 

assert(foo.name ~= bar.name) 

/인 MyModule입니다

local M = { 
    name = "hai", 
    changeName = function(self) 
     self.name = 'not_hai' 
    end 
} 
return M 

답변

3

모듈은 M 대신


M의의 생성자를 반환 할 수 있습니다

귀하의 모듈 :

,
return 
    function() -- this is a constructor of M 
     local M = { 
     name = "hai", 
     changeName = function(self) 
      self.name = 'not_hai' 
     end 
     } 
     return M 
    end 

주 스크립트

foo = require('modules.myModule')() 
bar = require('modules.myModule')() 

bar:changeName() 

assert(foo.name ~= bar.name) 
1

변형으로이 unrequire 기능을 사용할 수 있습니다 :이 방법은 내가 쓰는 모듈입니다

function unrequire(m) 
    package.loaded[m] = nil 
    _G[m] = nil 
end 

foo = require('myModule') 
unrequire('myModule') 
bar = require('myModule') 
0

local M = {} 

function M.new() 
    local myTable = { name = "hai" } 

    myTable:changeName() 
    self.name = 'not_hai' 
    end 

    return myTable 
end 

return M 

USAG e :

local m = require('myModule') 

foo = m.new() 
bar = m.new() 

bar:changeName()