Ruby条件表达式解析顺序
考虑以下两个代码段: 第一Ruby条件表达式解析顺序,ruby,expression,conditional-statements,Ruby,Expression,Conditional Statements,考虑以下两个代码段: 第一 if var1 = 'AAA' && var2 = 'BBB' puts "var1: #{var1}" puts "var2: #{var2}" end 产出: BBB BBB 第二 if var1 = 'AAA' || var2 = 'BBB' || var3 = 'CCC' puts "#{var1} #{var2} #{var3}" end 产出: AAA 为什么在第一个示例中,代码是由右侧的Ruby解释器解析的,
if var1 = 'AAA' && var2 = 'BBB'
puts "var1: #{var1}"
puts "var2: #{var2}"
end
产出:
BBB BBB
第二
if var1 = 'AAA' || var2 = 'BBB' || var3 = 'CCC'
puts "#{var1} #{var2} #{var3}"
end
产出:
AAA
为什么在第一个示例中,代码是由右侧的Ruby解释器解析的,而在第二个示例中是由左侧的?在哪里可以找到Ruby在条件(if/除非…)中解析运算符(表达式)的准确程度?这两个运算符都是从左到右解析的 让您感到困惑的是
&&
和|
的优先级高于=
。
因此:
var1 = 'AAA' && var2 = 'BBB'
相当于
var1 = ('AAA' && var2 = 'BBB')
var1 = ('AAA' || var2 = 'BBB' || var3 = 'CCC')
这使您的两个变量都等于BBB
,因为AAA
是真实的。
第二个例子也是如此:
var1 = 'AAA' || var2 = 'BBB' || var3 = 'CCC'
相当于
var1 = ('AAA' && var2 = 'BBB')
var1 = ('AAA' || var2 = 'BBB' || var3 = 'CCC')
它只是将AAA
分配给var1
而已
要在此处实现您想要的功能,请将括号放在您需要的位置,或者使用
和和或,因为它们的优先级较低。无论哪种方式,在开始检查条件时分配值都不是那么易读。Ruby运算符优先级正是您应该在这里回顾的内容。还有,请不要把你的问题贴成谜题。请提供回答所需的信息,然后以尽可能直截了当的方式提出您的问题。无法复制。@sawa,您的意思是什么?@ndn OP的代码不会输出OP声称的输出。@sawa,它会。。。当你执行它时,你会得到什么?“在检查时赋值是不可读的”-rubymine甚至强调这是一个警告,&
和|
具有比赋值更高的优先级,因此你可以使用x=a&&b&&c
,并让它按预期工作。