2017-08-08 3 views
2

Donc dans lua, je veux importer un module.dans lua (love2D), je veux importer une bibliothèque dans un sous-dossier, le fichier ne trouvera pas le prochain module requis

Je veux avoir mon "polygone" lib dans un sous-dossier, donc je référence comme ça

polygone local = require ('polygon.polygon')

cependant, il a besoin d'un autre module appelé ' delaunay ', il ne peut pas le trouver car il vérifie le dossier principal

Y at-il de toute façon d'éditer ma bibliothèque, pour que cela fonctionne? (Une sorte de possibilité d'ajouter des chemins de recherche?)

Merci

+1

fournir le message d'erreur et plus d'informations sur votre structure de dossiers – Piglet

+0

Lua a des problèmes avec la prise en charge des chemins relatifs pour les modules. –

+0

Si delaunay se trouve dans le sous-dossier polygone, vous pouvez utiliser require ('polygon.delauny'). Une meilleure solution pourrait être de s'assurer que les deux fichiers sont trouvables via package.path (comme expliqué dans les autres réponses) et juste utiliser require ('polygon') et require ('delaunay'). De cette façon, si vous changez la structure de votre répertoire, vous n'avez qu'à changer package.path. – Xeozim

Répondre

0

Vous pouvez ajouter les noms de vos sous-dossiers pour package.path afin que Lua pourrait les trouver:

package.path=package.path..";./polygon/?.lua" 

ou vous pouvez essayer de utilisez un chargeur personnalisé en utilisant dofile. De toute façon, vous devrez traiter les sous-dossiers explicitement. Plus d'infos est here.

1

Pour savoir où chercher des modules, Lua require utilise les variables package.path (.lua) et package.cpath (.so/.dll). Vous pouvez les modifier dans votre programme pour chercher dans le répertoire dans lequel vous les avez. Par souci de cohérence, vous pouvez regarder leur contenu pour savoir quel séparateur spécifique au système d'exploitation utiliser. Par exemple:

local sep = package.path:find("\\") and "\\" or "/" 
package.path = package.path .. ";." .. sep .. "polygon" .. sep .. "?.lua" 

Cela comprendrait ./polygon/?.lua dans le chemin de recherche, et un appel à require "delaunay" aurait donc le look de fonction pour exiger ./polygon/delaunay.lua en plus des chemins existants. Gardez à l'esprit que dans require chaînes, . indique un séparateur en ce qui concerne la recherche de fichiers, donc appeler require "polygon.delaunay" dans ce scénario signifiera rechercher ./polygon/polygon/delaunay.lua. D'après ce que je comprends de votre question, changer la variable package.path pour inclure le chemin vers lequel votre bibliothèque delaunay est stockée résoudrait votre problème, bien que pour donner à une solution spécifique plus d'informations sur votre projet et structure de répertoire est nécessaire.

+0

Vous pouvez utiliser "/" comme séparateur sur les systèmes windows et unix dans path/cpath – Xeozim