No. Lua non ha modo di sapere se uno script viene invocato "direttamente".
Ricorda: Lua e Python esistono per scopi diversi. Python è progettato per lo scripting da riga di comando. Scrivi uno script, che chiama i moduli che possono essere scritti in Python, C++ o altro. Lo script Python è in definitiva ciò che è responsabile di quale codice viene chiamato quando.
Lua è un linguaggio di script incorporato, in primo luogo. Mentre è possibile utilizzare l'interprete standalone lua.exe
per creare script da riga di comando, si tratta di qualcosa di un kludge. Lo scopo principale della lingua è quello di essere incorporato in alcune applicazioni scritte in C, C++ o altro.
Per questo motivo, lo non è il concetto di uno script "principale". Come definiresti cosa è "principale" e cosa no? Se il codice C può caricare qualsiasi script in qualsiasi momento, per qualsiasi scopo, quale di essi è "principale"?
Se si desidera definire questo concetto, è abbastanza semplice. Basta attaccare questo nella parte superiore dello script di "principale":
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
Certo, questo non funziona per niente caricato con require
; avresti bisogno di scrivere una versione di questo per require
pure. E certamente non funzionerà se il codice esterno utilizza le funzioni di caricamento di C-API (che è il motivo per cui require
probabilmente non funzionerà).
fonte
2012-01-30 15:02:59
Hai ragione, mi dispiace per il duplicato ... – Wookai