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

Ruby中简单布尔表达式输出不符合预期,求原因解释

问题解释:Ruby中and运算符的行为

首先明确Ruby里and逻辑运算符的核心规则:

  • 当左侧表达式是真值(非nil/false)时,会执行右侧表达式并返回右侧的值
  • 当左侧表达式是假值(nil/false)时,直接返回左侧的值,不会执行右侧

你的代码分析

  1. puts (1 and 0):
    1是真值,所以执行0并返回0,puts输出0,这和你看到的结果一致。

  2. puts (1 and 0 and 1):
    Ruby的逻辑运算符是左结合的,也就是会先计算左边的组合:((1 and 0) and 1)。
    先算1 and 0得到0(假值),之后0 and 1会直接返回0,不会执行后面的1,所以puts应该输出0,而不是你说的1。

为什么你会看到第二个输出是1?

大概率是代码存在笔误:

  • 可能把and写成了or,比如1 or 0 and 1:因为and优先级比or高,会先算0 and 1得到0,再算1 or 0得到1,最终输出1。
  • 可能括号位置写错了,或者混淆了and和其他运算符(比如&&,但这个场景下结果和and一致)。

实际运行验证

在Ruby 3.2中运行你给出的代码,两次输出都是0:

puts (1 and 0)       # 输出 0
puts (1 and 0 and 1) # 输出 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:58:09