は、私は、これは私が「BのC D EがF jは、」各文字の間に0.25秒に一度に一つの文字を印刷することが見込まちょうど楽しみのために、一度に1文字ずつ標準出力にゆっくりと印刷するルビープログラムを書くにはどうすればいいですか?
"a b c d e f g h i j k".each {|c| putc c ; sleep 0.25}
うまくいくかもしれないと思いました。しかし、文字列全体が一度に印刷されます。
は、私は、これは私が「BのC D EがF jは、」各文字の間に0.25秒に一度に一つの文字を印刷することが見込まちょうど楽しみのために、一度に1文字ずつ標準出力にゆっくりと印刷するルビープログラムを書くにはどうすればいいですか?
"a b c d e f g h i j k".each {|c| putc c ; sleep 0.25}
うまくいくかもしれないと思いました。しかし、文字列全体が一度に印刷されます。
2つのこと:
.each_char
を使用する必要があります。 Ruby 1.8では、String.each
が行単位で表示されます。 Ruby 1.9では、String.each
は推奨されていません。$stdout
を手動でフラッシュする必要があります。さもなければ、それらはバッファリングされる傾向があり、文字は最後に一気に現れる。。
#!/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 }
2つのこと:
each
を使用する前に、配列にその文字列を分割する必要があります。output bufferingをオフにします。
試してみてください。
%w"a b c d e f g h i j k".each {|c| putc c ; sleep 0.25}
各書き込みの間でフラッシュするSTDOUTを必要としないのRuby 1.9.2、とあるとして動作します。
介入するスペースを削除する場合は、%w
を削除し、each
の代わりにeach_char
を使用します。
Rubyバッファは出力され、特定のサイズに達した後に標準出力にフラッシュします。あなたはそれをフラッシュするように強制することができます。
"a b c d e f g h i j k".each_char do |char|
putc char
$stdout.flush
sleep 0.25
end
注:印刷されたときに、文字と文字の間にスペースを使用しない場合は、代わりに.each_char
の.split.each
を使用しています。
slowly do
"a b c d e f g h i j k"
end
これは "スロー印刷" の私の方法です:
あなたがこれを行うことができるだろう:このような定義を持つ:ちょうど楽しみのため
for i in "a b c d e f g h i j k".chars.to_a print i sleep 0.25 end
デフォルトの設定であるsplit()のパラメータは必要ありません。 '.split.each'が行います。 –
@マーク、それはクールです!私は本当にルビーを知らない、私はちょうど楽しみのために答えたが、私は1分erjiangより速かった:D – Nathan