Ruby中简单布尔表达式输出不符合预期,求原因解释
问题解释:Ruby中
and运算符的行为 首先明确Ruby里and逻辑运算符的核心规则:
- 当左侧表达式是真值(非
nil/false)时,会执行右侧表达式并返回右侧的值 - 当左侧表达式是假值(
nil/false)时,直接返回左侧的值,不会执行右侧
你的代码分析
puts (1 and 0):1是真值,所以执行0并返回0,puts输出0,这和你看到的结果一致。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
相关产品推荐
相关产品推荐

