3
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 的命令提示符

4

4 回答 4

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” 表示将托架返回其原始位置,这在打字机上将滚轮一直向右移动,因此我们可以再次开始在左边距上打字。带有移动头的打印机将其反转,并将打印头一直向左移动,但无论哪种情况,打印都会再次从左边距开始。使用控制台/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为您想要的,代码将自动使用正确数量的空格来覆盖字符。

于 2013-10-10T18:06:42.383 回答
2

无论如何,看起来退格键(至少在 Windows 中)只是将光标向后定位,您需要/想要在该点(或其中 6 个)用空格覆盖字符以“空白”文本。

于 2013-10-10T17:36:24.123 回答
2

或者,您可以使用它

def text_flasher(text)
    puts "\e[5m#{text}\e[0m"
end

text_flasher在控制台中使用,你会看到魔法:)

于 2013-10-10T18:27:32.527 回答
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)")
于 2013-10-10T17:50:04.067 回答