ruby - 返回布尔值而不是值,重新创建 .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]
我得到一个布尔返回而不是实际值。
解决方案
这是因为您推送的结果yield
(可以但不必是布尔值)而不是实际的集合元素。您应该根据yield
返回的内容添加更多元素,如下所示:
element = collection[count]
newColl.push(element) if yield(element)
顺便说一句,我真的不明白你为什么要检查my_select
方法内的数字奇偶校验?这没有道理。
推荐阅读
- django - curl: (7) 连接127.0.0.1 8000端口失败:连接被拒绝
- xcode - ALWAYS_SEARCH_USER_PATHS NO vs YES 的影响
- apache-spark - spark udf 中的加密解密,使用 JKS 文件
- javascript - javascript reduce函数的意外行为
- django - Django 无法将关键字“AuctionListing”解析为字段。选项有:auctionitem、auctionitem_id、currentbid、id、usernameb、usernameb_id
- python - 加入流流错误:pyspark.sql.utils.AnalysisException:'流数据帧/数据集不支持多个流聚合
- python - Python中的QuantLib - 不能腌制'SwigPyObject'对象
- database - PostgreSQL - 连接到 localhost:"****" 拒绝错误
- c - 使用 GMP 获取数字的二进制后缀的最有效方法是什么?
- wordpress - 在本地主机上工作时需要 imagick 吗?