¿Cómo puedo usar "poner" a la consola sin un salto de línea en ruby ​​on rails?

156

Tengo un método que pasa por un bucle; quiero que muestre un "." cada bucle para que pueda verlo en la consola. sin embargo, pone un salto de línea al final de cada uno cuando lo uso puts ".".

Si hay una manera para que solo tenga una línea continua?

Timothy T.
fuente

Respuestas:

199

Necesita usar print en lugar de Putts. Además, si desea que los puntos aparezcan sin problemas, debe vaciar el búfer stdout después de cada impresión ...

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

100.times do
  print_and_flush "."
  sleep 1
end

Editar: solo estaba investigando el razonamiento detrás de flush para responder el comentario de @ rubyprince, y me di cuenta de que esto podría limpiarse un poco simplemente usando $stdout.sync = true...

$stdout.sync = true

100.times do
  print "."
  sleep 1
end
idlefingers
fuente
3
Se $stdout.flush? Realmente se necesita .. estoy usando Rubí 1.8.7 y he hecho cosas con solo printy no he tenido problemas ..
rubyprince
66
Es útil si estás haciendo algo como una barra de progreso. Cuando lo usa printsolo, puede aparecer en bloques porque puede almacenarse en el búfer en lugar de escribirse de inmediato (no sé exactamente por qué). También puede ser específico del sistema operativo.
idlefingers
2
Lo probé con @ stdout.flush ... ¿algún beneficio al usar .sync = true en su lugar?
Timothy T.
Creo que establecer stdout en synces una exageración para generar una cadena. Entonces, si la aplicación genera mucho, será más lenta.
akostadinov