【发布时间】:2011-06-23 03:39:55
【问题描述】:
我认为这可能有效
"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 秒。而是一次性打印整个字符串。
【问题讨论】:
我认为这可能有效
"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 秒。而是一次性打印整个字符串。
【问题讨论】:
这是我的“慢打印”方式:
for i in "a b c d e f g h i j k".chars.to_a
print i
sleep 0.25
end
【讨论】:
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
【讨论】:
试试:
%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。
【讨论】:
两件事:
.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 }
【讨论】:
两件事:
each 之前,您需要将该字符串拆分为一个数组。$stdout.sync = true
"a b c d d e f g h i j k".split(" ").each {|c| putc c ; sleep 0.25}
【讨论】:
.split.each 可以。