Ruby中的Enumerable#each和Enumerable#each#u条目之间有区别吗?

Ruby中的Enumerable#each和Enumerable#each#u条目之间有区别吗?,ruby,syntax,each,Ruby,Syntax,Each,没有明确说明每个都是每个_条目的别名,但是每个_条目的描述完全符合我对每个的期望 在这两个答案的示例中,定义了新的类,这些类实现了可枚举模块,并定义了每个方法 有人能举一个内置类的例子吗,比如Array或Hash,每个和条目的行为都不同?它们是不同的。使用RDoc中的示例: class Foo include Enumerable def each yield 1 yield 1, 2 yield end end Foo.new.each_entry{|o|

没有明确说明
每个
都是
每个_条目
的别名,但是
每个_条目
的描述完全符合我对
每个
的期望

在这两个答案的示例中,定义了新的类,这些类实现了
可枚举
模块,并定义了
每个
方法


有人能举一个内置类的例子吗,比如
Array
Hash
,每个
条目的行为都不同?

它们是不同的。使用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]
[]
不同之处在于,
每个_条目
通过根据单个迭代中传递的元素数量的不同行为将所有元素传递给唯一的块变量:如果没有,则将其视为
nil
,如果有,则将其视为该参数,否则,将其放入数组中<另一方面,code>每个
只将在每次迭代中传递的第一个对象传递给唯一的块变量。

除了@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)
类字母表
包括可枚举的
AZ=('a'…'z')
定义每个
AZ.每个{字符|产生字符}
结束
结束
p字母表。新。每个_条目#
p Alphabet.new.each#在'block in each'中:未给出块(产量)(LocalJumpError)

哇,谢谢你。不过,还有一件事:如果每个
“只接受在每次迭代中传递的第一个对象”,那么在第三个示例中,当与splat操作符一起使用时,它如何给出输出?我们可以说,为了使
每个
都不仅仅接受单个迭代中给出的第一个元素,使用splat操作符。更精确地说,它只将第一个对象传递给第一个块变量。编辑了答案。这是一个更有表现力的答案。。。喜欢它。。。好的研究