puts
automatisch eine neue Zeile anhängt (\n
) nach der Zeichenfolge auf dem Bildschirm ausgibt. Dies ist in den meisten Fällen nützlich, aber nicht immer.
Verwenden print
, wenn Sie nicht eine neue Zeile wollen:
print "Foo"
In diesem Fall werden Sie wahrscheinlich auch die bestehende Linie löschen möchten; Sie können mit \r
das tun (für „Carriage Return“):
print "Foo\r"
Dieser den Cursor zurück in Spalte bewegen 0. Beachten Sie, dass es wird nicht klar alle Zeichen - es lediglich den Cursor bewegt sich zurück zu Spalte 0, damit Zeichen überschrieben werden können. So zum Beispiel dieses:
print "Hello\r"
print "Foo\r"
bewirkt:
Foolo
Da Foo
nur drei Zeichen gibt - zwei weniger als die auf dem Bildschirm. Um dies zu beheben, müssen wir Räume hinzu:
print "Foo \r"
gibt es auch \b
(Backspace), um den Cursor um ein Zeichen zu bewegen zurück:
print "Foo"
print "\b\bee"
bewirkt:
Fee
Alle das ist ziemlich mühsam mit zu arbeiten, und genau der Grund, warum die curses
Bibliothek existiert ;-) Es wickelt all dies in Wrapper-Funktionen, die sich mit dem Löschen der richtigen stu beschäftigen ff und es wurde ursprünglich für ASCII-Spiele wie folgt entwickelt ;-) Ich empfehle Ihnen, es zu benutzen!
Wenn Sie ein Spiel erstellen, können Sie die Bibliothek ['curses'] (https://github.com/ruby/curses) verwenden und eine Ereignisschleife verwenden, die den lesbaren Status Ihrer Tastatur überprüft. Es gibt keinen Grund für Threads hier. – tadman
Wie wird die korrekte Ausgabe von einem Thread durchgeführt? –
Wenn ich Ihren Code versuchte, wird der "Foo" immer am Anfang der Zeile geschrieben, nicht wie in Ihrem Fall eingefügt. Dies liegt wahrscheinlich an einem Unterschied in den Terminaleinstellungen. 'puts' schreibt einen Zeilenvorschub am Ende des Strings, und das Terminal, das Sie verwenden, interpretiert den Zeilenvorschub als Zeilenumbruch. Wie ist die Ausgabe, wenn Sie schreiben "puts" Foo \ r "'? – user1934428