我认为这可能有效
"a b c d e f g h i j k".each {|c| putc c ; sleep 0.25}
我希望看到“a b c d e f j”一次打印一个字符,每个字符之间间隔0.25秒。但相反,整个字符串会立即打印出来。
答案 0 :(得分:5)
两件事:
each
之前,您需要将该字符串拆分为数组。$stdout.sync = true
"a b c d d e f g h i j k".split(" ").each {|c| putc c ; sleep 0.25}
答案 1 :(得分:5)
两件事:
.each_char
来迭代字符。在Ruby 1.8中,String.each
将逐行进行。在Ruby 1.9中,不推荐使用String.each
。$stdout
。否则,它们往往会被缓冲,以便角色最后一次出现。
#!/usr/bin/env ruby
"a b c d d e f g h i j k".each_char {|c| putc c ; sleep 0.25; $stdout.flush }
答案 2 :(得分:2)
Ruby缓冲输出,并在达到一定大小后将其刷新到标准输出。你可以强迫它像这样冲洗。
"a b c d e f g h i j k".each_char do |char|
putc char
$stdout.flush
sleep 0.25
end
注意:如果您在打印时不希望字符之间有空格,请使用.split.each
代替.each_char
。
只是为了好玩:使用这样的定义:
def slowly
yield.each_char { |c| putc c; $stdout.flush; sleep 0.25 }
end
你可以这样做:
slowly do
"a b c d e f g h i j k"
end
答案 3 :(得分:1)
尝试:
%w"a b c d e f g h i j k".each {|c| putc c ; sleep 0.25}
这与Ruby 1.9.2一样,在每次写入之间不需要STDOUT来刷新。
如果您希望插入空格,请移除%w
并使用each_char
代替each
。
答案 4 :(得分:0)
这是我的“慢速打印”方式:
cPickle