seguidos primavera para mas japoneses japon hashtags felicidad espaƱol cultura lua require corona

lua - primavera - hashtags mas seguidos en instagram



Cargar archivos Lua por ruta relativa (4)

Si tengo una estructura de archivos como esta:

./main.lua ./mylib/mylib.lua ./mylib/mylib-utils.lua ./mylib/mylib-helpers.lua ./mylib/mylib-other-stuff.lua

Desde main.lua el archivo mylib.lua se puede cargar con la ruta completa require(''mylib.mylib'') . Pero dentro de mylib.lua también me gustaría cargar otros módulos necesarios y no tengo ganas de especificar siempre la ruta completa (por ejemplo, mylib.mylib-utils ). Si alguna vez decido mover la carpeta, voy a tener una gran cantidad de búsqueda y reemplazo. ¿Hay alguna forma de usar solo la parte relativa del camino?

UPD. Estoy usando Lua con Corona SDK, si eso importa.


Bajo el entorno Lua de Conky, he logrado incluir mi common.lua (en el mismo directorio) que require(".common") . Tenga en cuenta el punto inicial . personaje.


Estoy usando el siguiente fragmento de código. Debería funcionar tanto para los archivos cargados con require , como para los archivos llamados a través de la línea de comandos. Luego use requireRel lugar de require para aquellos que desea que se carguen con una ruta relativa.

local requireRel if arg and arg[0] then package.path = arg[0]:match("(.-)[^///]+$") .. "?.lua;" .. package.path requireRel = require elseif ... then local d = (...):match("(.-)[^%.]+$") function requireRel(module) return require(d .. module) end end


Hay una manera de deducir la "ruta local" de un archivo (más concretamente, la cadena que se utilizó para cargar el archivo).

Si necesita un archivo dentro de lib.foo.bar , puede estar haciendo algo como esto:

require ''lib.foo.bar''

Luego, puede obtener la ruta al archivo como la primera variable de elemento (y única) ... cuando está fuera de todas las funciones. En otras palabras:

-- lib/foo/bar.lua local pathOfThisFile = ... -- pathOfThisFile is now ''lib.foo.bar''

Ahora, para obtener la "carpeta" debe eliminar el nombre del archivo. La forma más sencilla es usar match:

local folderOfThisFile = (...):match("(.-)[^%.]+$") -- returns ''lib.foo.''

Y ahí lo tienes. Ahora puede anteponer esa cadena a otros nombres de archivos y usar eso para requerir:

require(folderOfThisFile .. ''baz'') -- require(''lib.foo.baz'') require(folderOfThisFile .. ''bazinga'') -- require(''lib.foo.bazinga'')

Si mueve bar.lua , folderOfThisFile se actualizará automáticamente.


Tu puedes hacer

package.path = ''./mylib/?.lua;'' .. package.path

O

local oldreq = require local require = function(s) return oldreq(''mylib.'' .. s) end

Entonces

-- do all the requires require(''mylib-utils'') require(''mylib-helpers'') require(''mylib-other-stuff'') -- and optionally restore the old require, if you did it the second way require = oldreq