我想用 ruby 创建一个秒表程序,所以我用谷歌搜索并找到了这个 SO Q .
但是在那边,作者用1000xxx.times
调用了tick
函数。我想知道如何使用 (every second).times
之类的方法或针对秒的每个增量调用 tick
函数。
最佳答案
这个函数:
def every_so_many_seconds(seconds)
last_tick = Time.now
loop do
sleep 0.1
if Time.now - last_tick >= seconds
last_tick += seconds
yield
end
end
end
像这样使用时:
every_so_many_seconds(1) do
p Time.now
end
结果:
# => 2012-09-20 16:43:35 -0700
# => 2012-09-20 16:43:36 -0700
# => 2012-09-20 16:43:37 -0700
诀窍是睡不到一秒钟。这有助于防止您丢失蜱虫。请注意,您不能保证永远不会丢失一个勾号。这是因为操作系统无法保证您的非特权程序在需要时获得处理器时间。
因此,请确保您的时钟代码不依赖于每秒调用的 block 。例如,这会很糟糕:
every_so_many_seconds(1) do
@time += 1
display_time(@time)
end
这样就好了:
every_so_many_seconds(1) do
display_time(Time.now)
end
关于ruby - 如何在ruby中每秒调用一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12504940/