2011-02-08 11 views

Odpowiedz

5

dwie rzeczy:

  1. Trzeba użyć .each_char iteracyjne ciągu znaków. W Ruby 1.8, String.each przejdzie linia po linii. W Rubim 1.9, String.each jest przestarzałe.
  2. Należy ręcznie przepłukać $stdout, jeśli chcesz, aby znaki pojawiły się natychmiast. W przeciwnym razie mają one tendencję do buforowania, tak aby postacie pojawiały się jednocześnie na końcu.

.

5

dwie rzeczy:

  1. Trzeba podzielić ten ciąg do tablicy przed użyciem each na nim.
  2. Wyłącz 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

nie potrzebujesz parametru do podziału(), ponieważ jest to ustawienie domyślne. Będzie działał ".split.each". –

+0

@ Mark, to jest świetne! Naprawdę nie wiem, Ruby, właśnie odpowiedziałem "dla zabawy", ale byłem o minutę szybszy od erjingina: D – Nathan

1

Spróbuj:

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

To działa jak jest z Ruby 1.9.2, która nie potrzebuje STDOUT do spłukiwania pomiędzy każdym zapisie.

Jeśli chcesz, aby przestrzenie pośrednie usunęły %w i użyj each_char zamiast each.

2

Buforuje wyjście i wypróżnia je na standardowe wyjście po osiągnięciu określonego rozmiaru. Możesz zmusić to do spłukiwania w ten sposób.

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

Uwaga: jeśli nie chcesz odstępy między znakami po wydrukowaniu, należy .split.each zamiast .each_char.

Tak dla zabawy: z definicji takich jak to:

Byłbyś w stanie to zrobić:

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

To mój sposób "slow skie":

for i in "a b c d e f g h i j k".chars.to_a 
    print i 
    sleep 0.25 
end 
Powiązane problemy