首页 > 解决方案 > 返回布尔值而不是值,重新创建 .select 方法

问题描述

我正在尝试select使用while循环和yield. 下面是我的代码:

def my_select(collection)
  count = 0
  newColl = []
  while collection.length > count
    if (collection[count] % 2 == 0)
      newColl.push(yield (collection[count]))
    end
    count += 1
  end
  newColl
end

当我运行以下命令时:

arr = [1, 2, 3, 4, 5]
my_select(arr) do |num|
  num.even?
end

我想要这个结果:

[2, 4]

但我明白了:

[true, true]

我得到一个布尔返回而不是实际值。

标签: rubybooleanreturn-value

解决方案


这是因为您推送的结果yield(可以但不必是布尔值)而不是实际的集合元素。您应该根据yield返回的内容添加更多元素,如下所示:

element = collection[count]
newColl.push(element) if yield(element)

顺便说一句,我真的不明白你为什么要检查my_select方法内的数字奇偶校验?这没有道理。


推荐阅读