在使用Ruby开发时,经常会遇到需要比较两个Hash对象的值的场合。代码类似如下:
x = Hash.newx[:a] = 'x'y = Hash.newy[:a] = 'y'x.keys.each do |key|if x[key] != y[key]puts "find difference for key #{key}: x = #{x[key]}, y = #{y[key]}"endend
这样写代码固然可以,但是代码显得有些零乱,另外这种比较逻辑经常需要复用,能不能把它封装在一个函数当中呢?答案是肯定的,使用Ruby提供的yield便可以实现:
def diff(hash_a, hash_b)hash_a.keys.each do |key|if hash_a[key] != hash_b[key]yield keyendendend
使用上面的函数就可以进行Hash的比较了,代码也干净许多,最重要的是逻辑可以复用:
x = Hash.newx[:a] = 'a'y = Hash.newy[:a] = 'b'diff(x, y) do |key|puts "find difference for key #{key}: x = #{x[key]}, y = #{y[key]}"end
遇见你,是我一生的幸运;爱上你,