2011-08-22 17 views
24

In Pascal, ho write e writeln. Apparentemente Lua's print è simile a writeln di Pascal. Abbiamo qualcosa di simile a write di Pascal? In che modo i comandi di stampa consecutivi possono inviare i loro output sulla stessa riga?Stampa Lua sulla stessa riga

print("Hello") 
print("World") 

uscita:

Hello 
world 

voglio avere questo:

Hello world 
+10

È * Lua *, non * LUA *. – lhf

risposta

50

Usa io.write invece print, che è destinata per usi semplici, come il debug, in ogni caso.

+1

questa è la risposta corretta più corta. – AlexStack

+3

beh, questo è il motivo per cui @lhf è uno dei creatori del linguaggio Lua. :) – felipsmartins

4

In alternativa, basta costruire la vostra stringa poi scrivere fuori con un singolo print

Non si può avere sempre accesso alla biblioteca io.

+0

Se non si ha accesso alla libreria 'io', perché si dovrebbe accedere a' print'? –

+2

Perché potresti trovarti in un ambiente embedded o in un altro ambiente limitato che ridefinisce 'print'. World of Warcraft per esempio. – sylvanaar

16

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.

+3

Questo può anche essere scritto come 'function print (...) io.write (table.concat ({...}," \ t ")," \ n ") end' a costo di creare una tabella e eseguire una concatenazione. – lhf

+2

Ma solo se tutti gli argomenti sono stringhe o numeri poiché ['table.concat'] (http://www.lua.org/source/5.1/ltablib.c.html#tconcat) chiama' lua_isstring() 'su ogni elemento della tabella ... rispetto alla libreria di base 'print' che chiama' tostring' su ogni parametro passato. – RBerteig

+1

Sì, hai ragione! – lhf

-4

Se si desidera utilizzare la stampa si potrebbe fare questo

di stampa ("ciao mondo")

Tutto inbetween i quozienti avranno stampato

3

è possibile utilizzare le variabili per "Ciao" e "Mondo". Quindi concatenarli in seguito. In questo modo:

local h = "Hello" 
local w = "World" 

print(h..w) 

Verrà visualizzato, in questo caso, come "HelloWorld".Ma è facile da risolvere. Spero che questo ha aiutato!

0

Il problema che ho riscontrato con l'uso di io.write over print è che quando a volte vuoi creare una nuova linea devi mettere "\ n" alla fine della tua riga di io.write per esempio

io.write "hello \n" 
io.write "world \n" 

qualcosa che ho capito, ma ho appena iniziato l'apprendimento Lua e questa è una buona domanda per me, c'è un modo più semplice per fare io.write ma non usare \ n alla fine di una nuova linea? Trovo che usare print su io.write mi porti qualche problema con l'aritmetica, variabili ecc ... quando li aggiungo dopo la stampa sulla stessa riga, quindi preferisco usare io.write ma \ n aggiunge codice aggiuntivo.

Problemi correlati