3
0.upto(9) do
    STDOUT.print "Flash!"
    sleep 0.5
    STDOUT.print "\b\b\b\b\b\b" # (6 backspaces, the length of "Flash!")
    sleep 0.5
end

このコードは機能しません。画面に印刷Flash!されますが、点滅しません。バックスペースが有効になっていないかのように、そこにとどまります。しかし、私はこれを行います:

0.upto(9) do
    STDOUT.print "Flash!"
    sleep 0.5
    STDOUT.print "\b\b\b\b\b" # (5 backspaces, the length of "Flash! - 1")
    sleep 0.5
end

そしてそれはほとんど機能します。これは次のように表示されます: FFFFFFFFFFlash!(9 回のループの後) バックスペースの数が、削除している文字列の長さと同じであると、バックスペースが有効にならないのはなぜですか?

Railsの一部であるライブラリのみを使用して、この問題を克服し、点滅するメッセージを作成するにはどうすればよいですか?

私はこのような回避策を試しました:

0.upto(9) do
    STDOUT.print " Flash!"
    sleep 0.5
    STDOUT.print "\b\b\b\b\b\b"
    sleep 0.5

end

( 内のスペースに注意してください" Flash!")、メッセージが画面上をクロールしているように見えます。興味深い効果ですが、私が望むものではありません。

Windows 7 で Ruby と Rails でコマンド プロンプトを使用しています

4

4 に答える 4

2

または、これを使用することもできます

def text_flasher(text)
    puts "\e[5m#{text}\e[0m"
end

コンソールで使用するtext_flasherと、魔法が表示されます:)

于 2013-10-10T18:27:32.527 に答える
2

とにかく、バックスペース(少なくともWindowsでは)はカーソルを戻すだけのように見えます。テキストを「空白」にするために、その時点(または6つ)のスペースで文字を上書きする必要があります。

于 2013-10-10T17:36:24.123 に答える