免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3226 | 回复: 3
打印 上一主题 下一主题

使用Ruby的Code Block创建一个Hash比较函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-07 14:38 |只看该作者 |倒序浏览
使用Ruby的Code Block创建一个Hash比较函数









在使用Ruby开发时,经常会遇到需要比较两个Hash对象的值的场合。代码类似如下:


Ruby代码
  1. 1.x = Hash.new  
  2. 2.x[:a] = 'x'  
  3. 3.y = Hash.new  
  4. 4.y[:a] = 'y'  
  5. 5.  
  6. 6.x.keys.each do |key|   
  7. 7.    if x[key] != y[key]   
  8. 8.        puts "find difference for key #{key}: x = #{x[key]}, y = #{y[key]}"  
  9. 9.    end  
  10. 10.end  
  11. x = Hash.new
  12. x[:a] = 'x'
  13. y = Hash.new
  14. y[:a] = 'y'

  15. x.keys.each do |key|
  16.         if x[key] != y[key]
  17.                 puts "find difference for key #{key}: x = #{x[key]}, y = #{y[key]}"
  18.         end
  19. end
复制代码
这样写代码固然可以,但是代码显得有些零乱,另外这种比较逻辑经常需要复用,能不能把它封装在一个函数当中呢?答案是肯定的,使用Ruby提供的yield便可以实现:


Ruby代码
  1. 1.def diff(hash_a, hash_b)   
  2. 2.    hash_a.keys.each do |key|   
  3. 3.        if hash_a[key] != hash_b[key]   
  4. 4.            yield key   
  5. 5.        end  
  6. 6.    end  
  7. 7.end  
  8. def diff(hash_a, hash_b)
  9.         hash_a.keys.each do |key|
  10.                 if hash_a[key] != hash_b[key]
  11.                         yield key
  12.                 end
  13.         end
  14. end
复制代码
使用上面的函数就可以进行Hash的比较了,代码也干净许多,最重要的是逻辑可以复用:


Ruby代码
  1. 1.x = Hash.new  
  2. 2.x[:a] = 'a'  
  3. 3.y = Hash.new  
  4. 4.y[:a] = 'b'  
  5. 5.  
  6. 6.diff(x, y) do |key|   
  7. 7.    puts "find difference for key #{key}: x = #{x[key]}, y = #{y[key]}"  
  8. 8.end  
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-12-08 08:54 |只看该作者
比较geek。

论坛徽章:
0
3 [报告]
发表于 2011-12-08 12:42 |只看该作者
比较geek。
2gua 发表于 2011-12-08 08:54



    不geek哈。简单实用的block应用。

论坛徽章:
0
4 [报告]
发表于 2011-12-09 12:18 |只看该作者
不geek哈。简单实用的block应用。
zuerrong 发表于 2011-12-08 12:42



    我说充分体现了Ruby风格的Geek。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP