Come posso usare "put" per la console senza un'interruzione di riga in ruby ​​on rails?


156

Ho un metodo che passa attraverso un ciclo - voglio che emetta un "." ogni loop in modo che io possa vederlo nella console. tuttavia, mette una interruzione di riga alla fine di ciascuno quando uso puts ".".

Se esiste un modo in modo che abbia solo una linea continua?

Risposte:


199

Devi usare print invece di put. Inoltre, se vuoi che i punti appaiano senza intoppi, devi svuotare il buffer stdout dopo ogni stampa ...

def print_and_flush(str)
  print str
  $stdout.flush
end

100.times do
  print_and_flush "."
  sleep 1
end

Modifica: stavo solo esaminando il ragionamento dietro flush per rispondere al commento di @ rubyprince, e mi sono reso conto che questo poteva essere ripulito un po 'semplicemente usando $stdout.sync = true...

$stdout.sync = true

100.times do
  print "."
  sleep 1
end

3
È $stdout.flushdavvero necessario? .. Sto usando Ruby 1.8.7 e ho fatto le cose solo con printe non ho avuto problemi ..
rubyprince

6
È utile se stai facendo qualcosa di simile a una barra di avanzamento. Quando lo usi printda solo, può uscire in blocchi perché può essere memorizzato nel buffer invece di essere scritto immediatamente (non so esattamente perché). Potrebbe anche essere specifico del sistema operativo.
inattivo

2
L'ho provato con @ stdout.flush ... eventuali vantaggi con l'utilizzo di .sync = true invece?
Timothy T.

Penso che impostare stdout su syncsia un overkill per generare una stringa. Quindi, se la tua app emette molto, sarà più lenta.
Akostadinov,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.