Ruby tap method
2013年8月26日 22:32
tap定义
class Object def tap yield self self end end
Usage
1
blah.sort.grep( /foo/ ).map { |x| x.blah }
传统调试方法:
xs = blah.sort.grep( /foo/ ) p xs # do whatever we had been doing with the original expression xs.map { |x| x.blah }
使用tap:
blah.sort.grep( /foo/ ).tap { |xs| p xs }.map { |x| x.blah }
2
( k + 1 ) / ( ( q - t ) / 2 )
传统调试方法:
i = ( q - t ) p i ( k + 1 ) / ( i / 2 )
使用tap:
( k + 1 ) / ( ( q - t ).tap { |i| p i } / 2 )
3
def blah @things.map { |x| x.length }.inject( 0 ) { |a, b| a + b } end
传统调试方法:
def blah sum = @things.map { |x| x.length }.inject( 0 ) { |a, b| a + b } p sum sum end
使用tap:
def blah @things.map { |x| x.length }.inject( 0 ) { |a, b| a + b }.tap { |sum| p sum } end