[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: "Require" in a sandboxed environment
- From: Nick Gammon <nick@...>
- Date: Sat, 11 Aug 2007 09:33:39 +1000
On 10/08/2007, at 6:13 PM, Tom Miles wrote:
Therefore whenever I wanted to require a package, I did:
utils = Require("utils")
This would then always directly reference the table
package.loaded.utils
However, this didn't work as I expected in some cases.
I'm not sure if this helps, but when writing an application recently
I found that if I did this:
a: require "b"
b: require "c"
(In other words, a indirectly acquires c)
... that c didn't have b's context. I wrote this loader for loading
the submodules, which is a bit different to yours:
-- loader for modules to load sub-modules, in the module context
function my_loader (name)
setfenv (assert (loadfile (
string.format (MY_LUA_DIRECTORY .. "%s.lua", name))), _M) ()
end -- my_loader
my_loader "c"
my_loader "d"
This effectively lets me split my project into smaller pieces,
however sub-modules (like c and d) did not have the module function
in them, because they were really parts of module b, broken into
smaller and more manageable pieces.
Without the setfenv above, doing dofile did not load c into the b's
module context in the way I expected. Probably I should have
researched it more. :)
- Nick