想要枚举的 Class 就得有一个 each 方法,它的工作就是 yield 项目给代码块,每次一个。
each 做的事在不同的类上可能不太一样,比如在数组上,each 会 yield 第一个项目,然后是第二个,第三个 ... 在 hash 里,yield 的是 key/value 作为两个元素的数组。在 file 处理上,每次会 yield 一行内容。range 迭代会先看一下有没有可能迭代,然后假装它是一个数组。在自己的类里定义了 each 方法,它的意思是你自己定义的,只要它 yield 点东西就行。
先写个类,理解一下 Enumerable 是怎么回事。Rainbow 彩虹,每次 yield 一种颜色:
class Rainbow include Enumerable def each yield 'red' yield 'orange' yield 'yellow' yield 'green' yield 'blue' yield 'indigo' yield 'violet' end end