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

Ruby:为何示例代码中的and return语句没有执行返回操作?

问题根本原因

这是由Ruby的两个内置特性共同导致的:

  • Ruby中puts方法的返回值固定为nil,nil属于布尔上下文中的假值
  • Ruby中and运算符为短路求值逻辑:只有左侧表达式返回真值时,才会执行右侧的表达式

你写的条件行实际执行顺序等价于如下代码:

if x > 10
  # 先执行puts,返回nil(假值)
  res = puts "#{x} > 10"
  # 左侧为假,and右侧的return永远不会执行
  res and return
end

所以调用foo(30)时,执行完第一行puts后直接跳过了return,继续向下执行第二行的puts "#{x} <= 10",就出现了你看到的输出结果。

修复方案

两种常用改法都可以解决问题:

方案1:拆分语句,避免依赖逻辑运算符的执行顺序

def foo(x)
  if x > 10
    puts "#{x} > 10"
    return
  end
  puts "#{x} <= 10"
end

方案2:单行写法用&&替代and,加括号明确执行顺序

注意&&优先级高于方法调用,需要用括号包裹puts调用避免语法解析异常:

def foo(x)
  (puts "#{x} > 10") && return if x > 10
  puts "#{x} <= 10"
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:45:04