Enumerable 文档没有明确说明它是的each
别名each_entry
,但它的描述each_entry
与我所期望的完全匹配each
。
在这两个答案的示例中,都定义了新的类,它们实现了Enumerable
模块并定义了each
方法。
有人可以举一个内置类的例子,比如Array
or Hash
,它的行为与each
and不同each_entry
吗?
Enumerable 文档没有明确说明它是的each
别名each_entry
,但它的描述each_entry
与我所期望的完全匹配each
。
在这两个答案的示例中,都定义了新的类,它们实现了Enumerable
模块并定义了each
方法。
有人可以举一个内置类的例子,比如Array
or Hash
,它的行为与each
and不同each_entry
吗?
它们不一样。使用 RDoc 中的示例:
class Foo
include Enumerable
def each
yield 1
yield 1, 2
yield
end
end
Foo.new.each_entry{|o| p o}
# =>
1
[1, 2]
nil
Foo.new.each{|o| p o}
# =>
1
1
nil
Foo.new.each{|*o| p o}
# =>
[1]
[1, 2]
[]
不同之处在于,each_entry
将所有元素传递给唯一的块变量,其行为取决于单次迭代中传递的元素数量:如果没有,则将其nil
作为大批。each
另一方面,仅将每次迭代中传递的第一个对象传递给唯一的块变量。
除了@sawa:
class Alphabet
include Enumerable
AZ = ('a'..'z')
def each
AZ.each{|char| yield char}
end
end
p Alphabet.new.each_entry #<Enumerator: #<Alphabet:0x000000028465c8>:each_entry>
p Alphabet.new.each #in `block in each': no block given (yield) (LocalJumpError)