7

ターミナルに 2 行出力して、両方とも削除できるようにしたいと思います。私はあなたが何かをすることによってそれを行うことができることを知っています

print "\b"*whatever

しかし、私はこのようなことをしたいと思います:

[1, 2, 3, 4, 5].each do |item|
    # code to delete the previous two lines
    print item.to_s + "\nHello!"
end

出力は、次のすべてをすばやく通過します

1
Hello!
2
Hello!
3
Hello!
4
Hello!
5
Hello!

しかし、最終的には、最終的なイテレーションだけが表示されます。

4

1 に答える 1

14

簡単なことですが、ANSI 互換の端末を想定できる場合 (通常は良い賭けです)、ANSI コードを直接出力できます。例えば、

 5.times do |item|
    print "\r" + ("\e[A\e[K"*3) if item > 0
    puts "#{item+1}\nHello!"
 end

\rカーソルを行頭に移動\e[Aし、カーソルを 1 行上に移動\e[Kし、カーソル位置から行末までクリアします。画面のさらに下に何も必要ない場合は、必要な\e[J場所にカーソルを置いたら送信することもできます。画面の最後まで完全にクリアされます。

より洗練されたものについては、Highline gemを見ることから始めることができます。

于 2013-02-20T02:52:39.130 に答える