以下内容完全相同:
第一种方法:
puts [1,2,3,4,5,6,6,6,6].select {|number| number == 6 }
输出:
6
6
6
6
第二种方法:
array = [1,2,3,4,5,6,6,6,6]
array.select do |number|
puts number == 6
end
输出:
false
false
false
false
false
true
true
true
true
为什么我没有得到相同的结果?我如何获得相同的结果?请解释一下发生了什么。
答案 0 :(得分:3)
在ruby doc中描述,
选择→an_enumerator
返回一个数组,其中包含给定的枚举的所有元素 block返回一个真值。
[1,2,3,4,5,6,6,6,6].select {|number| number == 6 }
按预期返回(即返回array
所在的number == 6
[6, 6, 6, 6]
在第二种方法中,您只是输出比较结果,这将产生一个布尔值。
答案 1 :(得分:2)
puts
选定的数组,而第二种方法puts
每次评估条件(无论条件是否满足)。number == 6
的评估,这将导致选定的数组[6, 6, 6, 6]
,而第二种方法中的块返回{{1}的评估} {,puts
,它会导致选定的数组nil
。[]
的评估,即puts
,而第二个方法返回选定的数组nil
。