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.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
Change msg
到你想要的,代码将自动使用正确数量的空格来覆盖字符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)