2016-02-12 21 views
0

我有此代码Array#select方法如何在Ruby中正确工作?为什么它返回一个空数组或原始数组?

arr = [1, 2, 3].select do |n| 
    n + 2 
    puts n 
end 

输出是

1 
2 
3 

并且返回值是

[] 

然后我有这样的代码

arr = [1, 2, 3].select do |n| 
    n + 2 
end 

和返回值是

[1, 2, 3] 

所以我知道阵列#选择调用块通过在从自连续元素的,返回包含该块返回一个真值的那些元素的数组。这些代码示例中的行为如何,因此我可以理解它为什么会返回这些值。

回答

4

Array#select使用你的数组中的元素创建一个新的数组,返回块中的真值。

在第一种情况下,块的最后一行是puts语句,它始终返回nil。因此[]

在第二种情况下,块的最后一行始终是数字,因此始终是真的。因此输出等于输入。

+0

为什么在第一个代码示例中它不返回[nil,nil,nil]? –

+0

它只使用返回真值的元素来创建Array的子​​集。返回nil的元素根本不会被添加。 – msergeant

+0

其实我知道为什么......因为ruby中的所有东西都是真的,除了假和零? –

相关问题