在数组上选择方法提供不同的结果

时间:2015-08-12 22:36:01

标签: arrays ruby

以下内容完全相同:

第一种方法:

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

为什么我没有得到相同的结果?我如何获得相同的结果?请解释一下发生了什么。

2 个答案:

答案 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