Nº Lua no tiene manera de saber si un guión está siendo invocado "directamente".
Recuerde: Lua y Python existen para diferentes propósitos. Python está diseñado para secuencias de comandos de línea de comandos. Usted escribe una secuencia de comandos, que llama a los módulos que pueden escribirse en Python, C++ o lo que sea. La secuencia de comandos de Python es en última instancia lo que está a cargo de qué código se llama cuando.
Lua es incrustado lenguaje de scripting, ante todo. Si bien puede usar el intérprete independiente lua.exe
para crear scripts de línea de comandos, eso es algo así como un kludge. El objetivo principal del lenguaje es incrustarse en alguna aplicación escrita en C, C++ o lo que sea.
Debido a esto, no es ningún concepto de un script "principal". ¿Cómo definirías lo que es "principal" y lo que no? Si el código C puede cargar cualquier secuencia de comandos en cualquier momento, para cualquier propósito, ¿cuál de ellos es "principal"?
Si desea definir este concepto, es bastante simple. Sólo se adhieren esta en la parte superior de su script "principal":
do
local old_dofile = dofile
function new_dofile(...)
if(__is_main) then
__is_main = __is_main + 1
else
__is_main = 1
end
old_dofile(...)
__is_main = __is_main - 1
if(__is_main == 0) then __is_main = nil end
end
dofile = new_dofile
end
Por supuesto, esto no va a funcionar para cualquier cosa cargado con require
; también necesitaría escribir una versión de esto para require
. Y ciertamente no funcionará si el código externo usa las funciones de carga C-API (razón por la cual require
probablemente no funcionará).
Tienes razón, disculpa por el duplicado ... – Wookai