ruby中迭代器枚举器的理解
参考《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 这个就会返回一个枚举器
ruby中迭代器枚举器的理解的更多相关文章
- ruby迭代器枚举器
迭代器一个迭代器是一个方法,这个方法里面有yield语句,使用了yield的方法叫做迭代器,迭代器并非一定要迭代,与传递给这个方法的块进行数据传输 yield将数据传给代码快,代码块再把数据传输给yi ...
- C#中的枚举器
更新记录 本文迁移自Panda666原博客,原发布时间:2021年6月28日. 一.先从可枚举类型讲起 1.1 什么是可枚举类型? 可枚举类型,可以简单的理解为: 有一个类,类中有挺多的数据,用一种统 ...
- C#中的枚举器(转)
术语表 Iterator:枚举器(迭代器) 如果你正在创建一个表现和行为都类似于集合的类,允许类的用户使用foreach语句对集合中的成员进行枚举将会是很方便的.这在C# 2.0中比 C# 1.1更容 ...
- C#图解教程 第十八章 枚举器和迭代器
枚举器和迭代器 枚举器和可枚举类型 foreach语句 IEnumerator接口 使用IEnumerable和IEnumerator的示例 泛型枚举接口迭代器 迭代器块使用迭代器来创建枚举器使用迭代 ...
- java枚举与.net中的枚举区别
通过一段时间的项目实践,发现java中的枚举与.net中的枚举有很大的差别,初期造成了我对java中的枚举一些错误理解及部分有缺陷的应用,其实追其原因还是因为我会习惯性的认为java的枚举在作用以及定 ...
- ruby迭代器iterator和枚举器Enumerator
编写自定义的迭代器 The defining feature of an iterator method is that it invokes a block of code associatedwi ...
- C# 枚举器和迭代器
一.枚举器(enumerator)和可枚举类型(enumeration) 我们都知道foreach语句可以用来遍历数组中的元素,但你有没有想过为什么它可以被foreach处理呢? 这是因为数组可以按需 ...
- 理解Ruby中的作用域
作用域对于Ruby以及其它编程语言都是一个需要理解的至关重要的基础知识.在我刚开始学习ruby的时候遇到很多诸如变量未定义.变量没有正确赋值之类的问题,归根结底是因为自己对于ruby作用域的了解不够, ...
- C#中的foreach语句与枚举器接口(IEnumerator)及其泛型 相关问题
这个问题从<C#高级编程>数组一节中的foreach语句(6.7.2)发现的. 因为示例代码与之前的章节连贯,所以我修改了一下,把自定义类型改为了int int[] bs = { 2, 3 ...
随机推荐
- 使用latencytop深度了解你的系统的延迟(转)
转载自系统技术非业余研究 http://blog.yufeng.info/archives/1239 我们在系统调优或者定位问题的时候,经常会发现多线程程序的效率很低,但是又不知道问题出在哪里,就知道 ...
- SSRS入门相关笔记
1.SSRS Server 的地址的查看及设置:打开 开始->程序-> Microsoft SQL Server 2012/2014 -> Configuration Tools - ...
- SQLServer中临时表与表变量的区别分析
临时表 临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在.临时表在创建的时候都会产生SQL Server的系统日志 ...
- 虚拟化之vmware-网络
http://blog.sina.com.cn/s/blog_6b89db7a01012jtw.htmlESXI 5.0 虚拟机的网络适配器兼容性列表 就需要在vSphere标准交换机(vSphere ...
- Openjudge计算概论-计算矩阵边缘元素之和
/*======================================================================== 计算矩阵边缘元素之和 总时间限制: 1000ms ...
- TKinter之窗口美化 窗口大小、图标等
设置窗口大小.设置窗口标题.设置窗口图标 效果图: 代码示例: #!/usr/bin/env python # _*_ coding:utf-8 _*_ from Tkinter import * r ...
- nginx ssi 配置小细节(一)
最近工作需要使用nginx的ssi (server side include)技术,在这里,将使用中的一点心得分享一下,也是一种备忘! 首先,nginx的ssi启用很简单,就只有三个最基本的指令: s ...
- HTML 图像
通过使用 HTML,可以在文档中显示图像. 实例 插入图像 本例演示如何在网页中显示图像. 从不同的位置插入图片 本例演示如何将其他文件夹或服务器的图片显示到网页中. (可以在本页底端找到更多实例.) ...
- Python基础(三)——集合、有序 无序列表、函数、文件操作
1.Set集合 class set(object): """ set() -> new empty set object set(iterable) -> n ...
- 线性判别分析(Linear Discriminant Analysis)转载
1. 问题 之前我们讨论的PCA.ICA也好,对样本数据来言,可以是没有类别标签y的.回想我们做回归时,如果特征太多,那么会产生不相关特征引入.过度拟合等问题.我们可以使用PCA来降维,但PCA没有将 ...