2011-02-08 17 views

Respuesta

5

dos cosas:

  1. Es necesario utilizar .each_char para iterar sobre los personajes. En Ruby 1.8, String.each irá línea por línea. En Ruby 1.9, String.each está en desuso.
  2. Debe vaciar manualmente $stdout si desea que los caracteres aparezcan inmediatamente. De lo contrario, tienden a almacenarse en el búfer para que los personajes aparezcan todos al mismo tiempo al final.

.

#!/usr/bin/env ruby 
"a b c d d e f g h i j k".each_char {|c| putc c ; sleep 0.25; $stdout.flush } 
5

dos cosas:

  1. necesita dividir esa cadena en una matriz antes de utilizar each en él.
  2. Desactivar output buffering.

    $stdout.sync = true 
    "a b c d d e f g h i j k".split(" ").each {|c| putc c ; sleep 0.25} 
    
+2

no necesita el parámetro para dividir(), ya que es el predeterminado. '.split.each' servirá. –

+0

@Mark, ¡eso es genial! Realmente no sé Ruby, solo respondí "por diversión" pero fui un minuto más rápido que erjiang: D – Nathan

1

Probar:

%w"a b c d e f g h i j k".each {|c| putc c ; sleep 0.25} 

que funciona como es con Ruby 1.9.2, que no necesita STDOUT para limpiar entre cada escritura.

Si desea los espacios intermedios, elimine %w y use each_char en lugar de each.

2

Rubí buffers de salida y hará que se vacíe en la salida estándar después de que alcance cierto tamaño. Puedes forzarlo a enjuagar así.

"a b c d e f g h i j k".each_char do |char| 
    putc char 
    $stdout.flush 
    sleep 0.25 
end 

Nota: si no desea que los espacios entre caracteres cuando se imprime, utilice .split.each en lugar de .each_char.

Sólo por diversión: con una definición así:

Usted sería capaz de hacer esto:

slowly do 
    "a b c d e f g h i j k" 
end 
0

Esta es mi manera de "impresión lenta":

for i in "a b c d e f g h i j k".chars.to_a 
    print i 
    sleep 0.25 
end 
Cuestiones relacionadas