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

Ruby中使用Proc与nil?检查数组含nil元素总返回false如何解决?

问题原因

  • 你代码里的p是Proc实例对象本身,不是Proc内部逻辑执行后的返回值,Proc对象和布尔值true永远不可能相等,所以if p == true的判断永远走else分支,输出false。
  • 要拿到Proc的执行结果,需要主动调用Proc的call方法触发执行。

修正后的代码

def check_nill(array1)
  p = Proc.new { array1.any? { |x| x.nil? } }
  # 调用call执行Proc,拿到判断结果
  result = p.call
  if result
    puts "true"  
  else  
    puts "false"  
  end 
end

# 测试用例
check_nill([1, 2, nil, 3]) # 输出true
check_nill([1, 2, 3]) # 输出false

补充说明

  • Proc还有简化的调用写法:p[]和p.()都等价于p.call,可以根据习惯选用
  • 你的判断逻辑本身是对的,Array#any?配合nil?确实可以正确判断数组中是否存在nil元素,问题只出在Proc的调用环节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:57:03