Enumerable documentation并未明确声明eacheach_entry的别名,但是each_entry的描述与我对each的期望完全匹配。

在两个答案的示例中,都定义了新类,这些新类实现Enumerable模块并定义each方法。

有人可以举一个内置类的示例,例如ArrayHash,它与eacheach_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/

10-12 17:12