Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby条件表达式解析顺序_Ruby_Expression_Conditional Statements - Fatal编程技术网

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
,并让它按预期工作。