parent j'ai une configuration de fichier comme ceci:nécessitant un module luajit dans un sous-répertoire est Écrasement d'un module du même nom dans le répertoire
main.lua (requires 'mydir.b' and then 'b')
b.lua
mydir/
b.so (LuaJIT C module)
De principale, je le fais:
function print_loaded()
for k, v in pairs(package.loaded) do print(k, v) end
end
print_loaded()
require 'mydir.b'
print_loaded()
-- This would now include 'mydir.b' instead of 'b':
local b = require 'b'
Les sorties des print
s montrent que mon appel à require 'mydir.b'
définit la valeur de retour comme la valeur de package.loaded['b']
ainsi que le package.loaded['mydir.b']
attendu. Je voulais avoir package.loaded['b']
laissé non réglé afin que je puisse plus tard require 'b'
et ne pas se retrouver avec la valeur (à mon avis erronée) en cache de mydir.b
.
Ma question est: Quelle est une bonne façon de faire face à cela?
Dans mon cas, je veux être en mesure de copier autour mydir
comme subdir de l'un de mes projets luajit, et ne pas avoir à se soucier de mydir.whatever
polluer l'espace de noms de module en détruisant tout plus tard require
s de whatever
au répertoire parent niveau.
En anticipant les gens qui disent, "renommez simplement vos modules!" Oui. Je peux le faire. Mais j'aimerais savoir s'il existe une meilleure solution qui me permet de ne pas avoir à m'inquiéter des collisions de noms.
Est-ce que votre 'b.lua' utilise la fonction' module' par hasard? – siffiejoe
Non, ce n'est pas le cas. Ce comportement semble être indépendant du contenu de 'b.lua'. – Tyler
La bibliothèque 'b.so' définit-elle' packages.loaded' (en utilisant 'module') n'importe où? –