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操作符。更精确地说,它只将第一个对象传递给第一个块变量。编辑了答案。这是一个更有表现力的答案。。。喜欢它。。。好的研究