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