我有以下定义:
class AllVowels
@@vowels = %w{a e i o u}
def each
@@vowels.each {|v| yield v}
end
end
此代码:
AllVowels.new.each {|vowels| puts vowels}
只输出一次元音:
a
e
i
o
u
而这段代码:
puts AllVowels.new.each {|vowel| puts vowel}
两次输出元音:
a
e
i
o
u
a
e
i
o
u
为什么我会得到两个元音副本?
答案 0 :(得分:2)
puts AllVowels.new.each {|vowel| puts vowel}
AllVowels.new.each
为每个项目调用puts vowel
,从而产生第一个a e i o u
。然后,凭借Ruby的隐式返回,它返回
@@vowels.each {|v| yield v}
这是@@vowels
本身,允许链接。在该数组上调用puts
会产生第二个a e i o u
。
这可能有助于澄清事情:
vowels = AllVowels.new.each do |vowel|
puts "In each, got #{vowel}"
end
puts "Outside of each, got #{vowels}"