2

示例很简单,我需要 Ruby 1.8.7的解决方案

编辑 添加Ramaze调用以更好地解释编辑块的需要。我想要一种更改块的方法,以便我可以在rescue线程失败时包装块并记录。API链接

class Foo
  def self.execute(&block)
    # Remaze will create new thread to execute the block
    # I want to change block so that I can add rescue in case thread fails
    Ramaze::defer(block)
  end
end

用法

Foo.execute do
  puts "Hello!!!"
end
# => Hello!!!

我正在尝试做的是添加几行代码,&block例如puts "World!!!最后但动态。现实世界的实现是我有一个推迟创建线程的类,我想在推迟创建线程rescue之前添加块。这样,每当线程失败时,我都不需要挠头。

谢谢你。

4

1 回答 1

3

原来解决方案很简单,只是没有使用积木的经验,马上就能看到。塞尔吉奥建议的东西。

class Foo
  def self.execute(&block)
    Ramaze::defer(&wrap(&block))
  end

  private

  def self.wrap(&block)
    return lambda do
     begin
      yield
      rescue Exception => e
       Log.error "[ERROR IN THREAD] #{e.message}, #{e.backtrace}"
      end
    end
  end
end
于 2012-11-28T13:26:15.577 回答