lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On 23 October 2013 09:53, Robert Virding
<robert.virding@erlang-solutions.com> wrote:
> Yes, BUT NO. Well it shouldn't work. In the 5.2 manual description of package.loaded it says
>
> "package.loaded
>
> A table used by require to control which modules are already loaded. When you require a module modname and package.loaded[modname] is not false, require simply returns the value stored there.
>
> This variable is only a reference to the real table; assignments to this variable do not change the table used by require."
>
> Which seems to imply that these suggestions should not work. This is why I was asking as otherwise it is easy.
>
> Robert
>
> ----- Original Message -----
>> From: "Luiz Henrique de Figueiredo" <lhf@tecgraf.puc-rio.br>
>>
>> > Is it possible to re-require a module?
>>
>> function rerequire(m)
>>       package.loaded[m] = nil
>>       return require(m)
>> end
>>
>> or if your module sets a global:
>>
>> function rerequire(m)
>>       package.loaded[m] = nil
>>       _G[m] = nil
>>       _G[m] = require(m)
>>       return _G[m]
>> end
>>
>> Search lua-l archive for unrequire. See for instance
>>       http://lua-users.org/lists/lua-l/2012-12/msg00883.html
>>
>>
>

package.loaded is a reference to the table that require looks in, but
require has its own reference to it, so setting package.loaded to a
different table won't do anything. Changing the contents of that table
does affect require.