You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby find_favorite方法从哈希数组返回目标哈希时异常返回nil问题

问题原因
  • 逻辑运算符转义错误:现有代码中写的&&是HTML转义后的内容,Ruby无法识别为逻辑与运算符,即使修正该问题,仍存在核心返回值逻辑错误。
  • 块返回值不会作为方法返回值:在each迭代块内直接写hash仅会作为当前块的返回值,既不会终止方法执行,也不会作为整个find_favorite方法的返回值。each执行完成后会返回原数组,而你后续显式写了return nil,导致方法无论是否找到符合条件的哈希,最终都返回nil。
  • 冗余遍历逻辑:不需要遍历哈希的所有键值对,可直接通过hash[:is_my_favorite?]取值判断,代码更简洁高效。
正确实现方案

Ruby内置的Enumerable#find方法刚好完全匹配需求:遍历集合返回第一个符合条件的元素,没有符合条件的元素时自动返回nil,实现代码如下:

def find_favorite(array_of_hash_objects)
  array_of_hash_objects.find { |hash| hash[:is_my_favorite?] }
end

如果你希望沿用原遍历逻辑修改,可在匹配到符合条件的哈希时显式return终止方法执行:

def find_favorite(array_of_hash_objects)
  array_of_hash_objects.each do |hash|
    return hash if hash[:is_my_favorite?]
  end
  nil
end

以上两种实现均可完全通过你提供的全部RSpec测试用例。

内容的提问来源于stack exchange,提问作者shimurai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:27:00