得到由yield返回的块

时间:2013-03-08 22:21:34

标签: ruby sequel

假设您有这样的方法:

def log_yield(sql, args=nil)
  sql = "#{sql}; #{args.inspect}" if args
  t0 = Time.now
  begin
    yield
  rescue => e
    log_exception(e, sql)
    raise
  ensure
    t1 = Time.now
    log_duration(Integer((t1-t0)*1000), sql) unless e
  end
end

我需要覆盖此方法并以类似的方式实现它但是我需要获取yield返回的块。

(具体来说,我需要确定在Sequel :: Database中生成特定sql的块)

1 个答案:

答案 0 :(得分:0)

块只是美化参数。在方法中,它通过ruby实现为您添加,但通常您可以将方法定义为:

def log_yield(sql, args=nil, &block)
    # do whatever you want with the block here
end

当然,您可以在继承的类中自由地覆盖它。如果没有提供块,您可以使用block_given?改变方法中的逻辑。