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
相关产品推荐
相关产品推荐

