Enumerable documentation并未明确声明each
是each_entry
的别名,但是each_entry
的描述与我对each
的期望完全匹配。
在两个答案的示例中,都定义了新类,这些新类实现Enumerable
模块并定义each
方法。
有人可以举一个内置类的示例,例如Array
或Hash
,它与each
和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
,则将其作为参数,否则将其放入在一个数组中。另一方面,ojit_code仅将每次迭代中传递的第一个对象传递给唯一的块变量。关于ruby - Ruby中的Enumerable#each和Enumerable#each_entry之间有区别吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19840059/