ruby中迭代器枚举器的理解

本文深入探讨了Ruby编程语言中的迭代器和枚举对象的概念,包括迭代器的工作原理、each方法、枚举器的使用以及如何在类中实现Enumerable接口以获取迭代方法。详细解释了yield语句的作用以及枚举器如何与代码块交互,提供了实际应用场景和代码示例。

参考《ruby编程语言》5.3迭代器和可枚举对象

迭代器
一个迭代器是一个方法,这个方法里面有yield语句,这个方法里的yield语句,与传递给这个方法的块进行数据传输

yield将数据传给代码快,代码块再把数据传输给yield

each方法就是一个迭代器,里面有yield语句

枚举器
1 一个枚举器是Enumerable::Enumerator的一个对象,Enumerable是一个模块
2 使用枚举器 1.8的时候需要 require 'enumerator',在2.1就不用了
3 可以通过new来实例化一个枚举器,但是通常使用Object类的to_enum或enum_for,返回一个枚举器,这个枚举器只是简单调用目标对象的each方法,这句话意思就是说例如 a.to_enum执行后返回一个枚举器,这个枚举器会调用a对象的each方法


4 当给to_enum传递一个符号参数和其他参数的时候,或者使用enum_for语义上更好例如
a.enum_for(:bbb,arg1,arg2),这个:bbb是一个迭代器方法来自a对象,enum_for方法返回一个枚举器,这个枚举器有一个each方法,这个each方法调用上面a对象的迭代器方法就是这个:bbb方法,把其余参数arg1,arg2传递给那个迭代器:bbb


5使用场景,当一个类A ,include Enumerable时候。A的实例对象就具备了Enumerable里的方法,当我们 a = A.new后, a.enum_for(:xxx)就返回了一个枚举器,这个枚举器的each方法调用这个xxx方法,而这个xxx方法就是Enumerable里的一个迭代器方法或者别的方法,这样就可以传递一个代码块给这个xxx迭代器进行一些运算

 

6 在1.9,2.1中应该也是一样,不需要显示的调用to_enum或者enum_for,当不用代码块调用内建的迭代器(内建迭代器指的是times,upto,downto,step.each及Enumerable的相关方法)的时候,就是指a.enum_for(:each)这句执行但是没有传递代码快,不传递代码快的话就自动返回一个迭代器
a.each 这个就会返回一个枚举器

转载于:https://www.cnblogs.com/or2-/p/5040609.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值