2011-02-08 11 views

risposta

5

due cose:

  1. è necessario utilizzare .each_char per scorrere i caratteri. In Ruby 1.8, String.each andrà linea per linea. In Ruby 1.9, String.each è deprecato.
  2. È necessario svuotare manualmente $stdout se si desidera che i caratteri vengano visualizzati immediatamente. In caso contrario, tendono a essere bufferizzati in modo che i caratteri vengano visualizzati tutti in una volta alla fine.

.

#!/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

due cose:

  1. è necessario dividere la stringa in un array prima di utilizzare each su di esso.
  2. Spegnere 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

non è necessario il parametro da dividere(), poiché quello è il valore predefinito. '.split.each' farà. –

+0

@ Mark, È fantastico! Non conosco davvero Ruby, ho appena risposto "per divertimento" ma sono stato un minuto più veloce di erjiang: D – Nathan

1

Prova:

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

che funziona come è con Ruby 1.9.2, che non ha bisogno di lavare STDOUT tra ogni scrittura.

Se si desidera che gli spazi intermedi rimuovano %w e utilizzi each_char anziché each.

2

Ruby buffer di uscita e lo svuoterà sullo standard output dopo che raggiunge una certa dimensione. Puoi costringerlo a sciacquare in questo modo.

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

Nota: se non si desidera che gli spazi tra i caratteri in fase di stampa, utilizzare .split.each invece di .each_char.

Solo per divertimento: con una definizione del genere:

Si sarebbe in grado di fare questo:

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

Questo è il mio modo di "stampa lenta":

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