1

所以我在 Ruby 中工作,我的想法是不断地在自身上重新打印一组字符串,直到按下一个键。这是我的代码

frame = 
"aaaa
bbbb
cccc
dddd"

thread = Thread.new do
    while(true)
        print frame
        sleep(0.5)
    end

end

thread.run

begin
  system("stty raw -echo")
  str = STDIN.getc
ensure
  system("stty -raw echo")
end

thread.kill

当此代码执行时,它会生成输出

aaaa
bbbb
cccc
ddddaaaa
        bbbb
            cccc
                ddddaaaa
                        bbbb
                            cccc
                                ddddaaaa
                                        bbbb
                                            cccc
                                                ddddaaaa
                                                        bbbb
                                                            cccc
                                                                dddd

显然,你会认为它应该产生

aaaa
bbbb
cccc
dddd

重复直到按下一个键,我不知道为什么它没有。想法?

4

1 回答 1

2

以下代码按我的预期工作,包括打印换行符。如果它对您正常工作,那么您错误地确定了问题的原因。

swivel = Thread.new do
  loop do
    print "Hello\nWorld"
    sleep 0.5
  end
end.run

puts "Press Enter to Stop"
str = STDIN.gets

swivel.kill

编辑:当你打电话时stty raw -echo,任何\n字符只会走一行。你需要\r\n先到一行的前面,然后\n再到下一行。大概您的源文件是用“unix line endings”(\n仅限)保存的,因此字面上嵌入在您的字符串中的换行符是不够的。

于 2013-05-03T02:11:39.550 回答