1

&block をパラメーターとして受け入れ、n 秒ごとに実行できるセルロイド アクターを作成しようとしています。しかしcall、ループ内からブロックするeveryと、何もしないように見えますか?

このクラスの例を見てみましょう:

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と、出力がまったく得られないことに気付きました...?

4

0 に答える 0