Espansione su lhf's correct answer, la libreria io
è preferibile per l'uso di produzione.
La funzione print
nella libreria di base viene implementata come funzionalità primitiva. Permette script veloci e sporchi che calcolano qualcosa e stampano una risposta, con poco controllo sulla sua presentazione. I suoi principali vantaggi sono che costringe tutti gli argomenti a string
e che separa ogni argomento nell'output con schede e fornisce una nuova riga.
Questi vantaggi diventano rapidamente difetti quando è richiesto un controllo dettagliato dell'uscita. Per quello, hai davvero bisogno di usare io.write
. Se si mischiano print
e io.write
nello stesso programma, è possibile inciampare su un altro difetto. print
utilizza l'handle di file C stdout
in modo esplicito. Ciò significa che se si utilizza io.output
per modificare l'handle del file di output, io.write
farà ciò che si aspetta ma non lo sarà print
.
Un buon compromesso può essere quello di implementare una sostituzione per print
in termini di io.write
. Potrebbe sembrare semplice come questo campione testato in cui ho cercato di scrivere in modo chiaro, piuttosto che in modo ottimale e ancora gestire "correttamente" nil
argomenti:
local write = io.write
function print(...)
local n = select("#",...)
for i = 1,n do
local v = tostring(select(i,...))
write(v)
if i~=n then write'\t' end
end
write'\n'
end
Una volta che si implementa la propria versione di print
, allora può essere tentare di migliorarlo in altri modi per la tua applicazione. Utilizzare qualcosa con più controllo di formattazione di quello offerto da tostring()
è una buona idea. Un altro sta considerando un separatore diverso da un carattere di tabulazione.
È * Lua *, non * LUA *. – lhf