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
答案 0 :(得分:5)
通常这会写成:
0.upto(9) do
STDOUT.print "\rFlash!"
sleep 0.5
STDOUT.print "\r " # Send return and six spaces
sleep 0.5
end
回到我们与TTY和点阵式打印机交谈的日子里,我们很快习惯了马车控制字符,比如“\ r”,“\ n”,“\ t”等等。今天,人们很少这样做,因为他们想要使用网络和浏览器;学习与设备交谈的时间很晚。
“\ r”表示将托架返回原位,在打字机上将滚轮一直向右移动,这样我们就可以再次开始在左边缘打字。带有移动头的打印机将打印头颠倒过来,并将打印头一直向左移动,但是,无论哪种情况,都会在左边缘再次打印。使用console / telnet / video-TTY,它将光标移动到左边距。它完全相同,只是技术不同。
更有用的例程是:
msg = 'Flash!'
10.times do
print "\r#{ msg }"
sleep 0.5
print "\r#{ ' ' * msg.size }" # Send return and however many spaces are needed.
sleep 0.5
end
将msg
更改为您想要的内容,代码将自动使用正确数量的空格来覆盖字符。
答案 1 :(得分:2)
无论如何,它看起来像退格(至少在窗口中)只是将光标定位回来,你需要/想要用该点(或其中的6个)用空格覆盖该字符以“清空”文本。 / p>
答案 2 :(得分:2)
或者,你可以使用这个
def text_flasher(text)
puts "\e[5m#{text}\e[0m"
end
在控制台中使用text_flasher
,您将看到魔术:)
答案 3 :(得分:1)
是的,根据@rogerdpack的输入,我设计了一个解决方案:
def flashing_output(output)
message = output
backspace = "\b"
space = " "
backspace_array = []
space_array = []
length = message.length
length.times do
backspace_array << backspace
space_array << space
end
0.upto(9) do
print message
sleep 0.5
print backspace_array.join.to_s + space_array.join.to_s + backspace_array.join.to_s + backspace_array.join.to_s
sleep 0.5
end
end
flashing_output("Flashing Foobars! (not a euphemism)")