0

假设你有这样的方法:

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 的块是什么)

4

1 回答 1

0

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

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

当然,您可以在继承的类中随意覆盖它。如果此处未提供该块,您也可以使用block_given?.

于 2013-03-09T00:41:39.893 回答