【发布时间】:2013-10-18 14:31:08
【问题描述】:
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 的命令提示符
【问题讨论】:
-
有趣的代码..我一直在运行它..并享受输出:)
-
您可能希望使用库来执行此操作,例如 curses,或者至少是 ANSI library。还要确保设置了
STDOUT.sync = true。没有必要指定STDOUT.print,因为print默认会这样做。 -
对不起,如果这是一个初学者的问题,但我可以在不安装 gem 的情况下使用 curses 吗?默认情况下它是 ruby 的一部分吗?
-
不必使用
STDOUT.print。默认情况下,print和puts都输出到 STDOUT。 -
在打印花哨的东西之前,请确保
$stdout.isatty:)
标签: ruby