[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: A guide to building Lua modules
- From: Coroutines <coroutines@...>
- Date: Mon, 14 Apr 2014 09:23:25 -0700
On Mon, Apr 14, 2014 at 9:19 AM, Dirk Laurie <dirk.laurie@gmail.com> wrote:
> 2014-04-14 18:03 GMT+02:00 Coroutines <coroutines@gmail.com>:
>> On Mon, Apr 14, 2014 at 8:55 AM, Dirk Laurie <dirk.laurie@gmail.com> wrote:
>>> 2014-04-14 17:29 GMT+02:00 Coroutines <coroutines@gmail.com>:
>>>
>>>> If a module returns false or nil, I believe it will be loaded from the
>>>> file on every require().
>>>
>>> Not quite. The go/nogo test is whether there is an entry for the module
>>> in package.loaded.
>>>
>>> $ lua
>>> Lua 5.2.3 Copyright (C) 1994-2013 Lua.org, PUC-Rio
>>>> package.loaded.lpeg = "bazinga"
>>>> lpeg = require"lpeg"
>>>> =lpeg
>>> bazinga
>>>
>>
>> I thought it checked package.loaded.module_name for a boolean-true
>> value and returned that, otherwise it loaded the module (if it exists)
>> from the search paths, no? If you return nil/false it'll be loaded
>> from the file every time?
>>
>
> The test is simply on the existence of the key in the table.
> Whether it was put there by `require` is immaterial. If the
> next `require` finds no key, it reloads, otherwise not.
>
>> package.loaded.lpeg = "false"
>> lpeg = require"lpeg"
>> return lpeg
> false
>> package.loaded.lpeg = nil
>> lpeg = require"lpeg"
>> return lpeg
> table: 0x91c6de0
>
Okay, so it's simply a:
if package.loaded[modname] == nil then
package.loaded[modname] = load_from_paths(modname)
end
return package.loaded[modname]