Array#select 方法在 ruby​​ 中到底如何工作?为什么它返回一个空数组或原始数组?

but*_*y85 0 ruby arrays select arraycollection

我有这个代码

arr = [1, 2, 3].select do |n|
  n + 2
  puts n
end
Run Code Online (Sandbox Code Playgroud)

输出是

1
2
3
Run Code Online (Sandbox Code Playgroud)

返回值为

[]
Run Code Online (Sandbox Code Playgroud)

然后我有这个代码

arr = [1, 2, 3].select do |n|  
  n + 2
end
Run Code Online (Sandbox Code Playgroud)

返回值为

[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

所以我知道 Array#select 调用从 self 传入连续元素的块,返回一个包含块返回真值的元素的数组。它在这些代码示例中的行为如何,这样我就可以理解它为什么返回这些值。

mse*_*ant 5

Array#select使用从块返回 true 的数组元素创建一个新数组。

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

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