Ruby小技巧:Each with object

Ruby Bits: Each with object

Enumerable是Ruby世界的核心模块。如果熟悉了它,可以说距离深谙Ruby之道也就不远了。
在所有enumerable模块的酷炫方法中,我最喜欢的,甚至公开承认过它是我在整个Ruby语言中的最爱,那就是each_with_object。
使用方法如下:

numbers = [1, 2, 3, 4]

numbers.each_with_object([]) do |number, acc|
  acc << number * 3
end

## => [3, 6, 9, 12]

它通过遍历数组的每个元素,并向其做相关操作。和each方法相似,不同之处在于each_with_object提供一个累加器,也就是上面例子中的acc
这个对象可以在遍历元素之间传递。这和 inject或reduce的用法类似,不同之处在于块尾不用再返回累加器,方法会自动将其返回。
使用这个方法需要注意的是,累加器不能用Fixnum或者String类型的值。
在实际使用场景中可以被用来创建一个对象的数组,如下例:

  (1..10).each_with_object([]) do |num, questions|
    questions << Question(name: num.to_s)
  end
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,188评论 19赞 139
  • 迭代器和可枚举对象 迭代器的描述并不准确,像”期待一个关联代码块的方法“这样的描述更加准确一些。迭代器是 Ruby...
    零小白阅读 854评论 0赞 1
  • 一、读书笔记3.4 剩余部分当对象需要访问同类的其他对象的内部状态时,使用保护访问(protected acces...
    柳辉阅读 498评论 0赞 0
  • 请你不要相信孤独,在这个世界上真的有人在过着你想要的生活。 真正幸福的人,都不去努力追求一个极致的物质生活,他们做...
    啊南风知我意阅读 317评论 0赞 1
  • UIView的setNeedsDisplay和setNeedsLayout方法。首先两个方法都是异步执行的。而se...
    program袁阅读 1,122评论 0赞 1

友情链接更多精彩内容