1

我正在尝试创建一个可以接受 &block 作为参数并每 n 秒执行一次的赛璐珞演员。但是,当我callevery循环中阻塞时,它似乎从来没有做任何事情?

以这个示例类为例:

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块外调用时,它工作正常,并且您可以看到everyTimer 工作正常……但是似乎并不是每个人都调用了该块?

任何人都能够阐明我做错了什么?

更新:我注意到如果我移动puts "tock" 下面@block.call它根本不会得到输出......?

4

0 回答 0