我试图创建一个Celluloid Actor,它可以接受& block作为参数,并且每隔n秒执行一次。但是,当我call
循环中的every
块时,它似乎永远不会做任何事情?
举个例子claass:
require 'celluloid/autostart'
class FooBar
include Celluloid
def initialize(&block)
@block = block
execute_block
every(2) do
puts "tick"
execute_block
end
end
def execute_block
puts "tock"
@block.call
end
end
如果我尝试以下方法:
a = FooBar.new { puts "Hi" }
然后我得到了这个令人困惑的输出:
tock
Hi
tick
tock
tick
tock
tick
tock
tick
tock
tick
...
您可以看到,当我第一次从execute_block
块之外调用every
时,它工作正常,您可以看到every
计时器工作正常......但是看起来每个人都看不到这块?
任何人都可以了解我做错了什么?
更新:我注意到如果我将puts "tock"
移到下面@block.call
它根本就不会输出......?< / p>