我正在为Ruby 1.8和1.9阅读一本名为“Ruby Programming Language”的书。该书说if-operator的优先级低于赋值运算符。如果这是真的,那么我不明白这个表达式是如何工作的:
x = 5 if false
如果赋值运算符具有更高的优先级,那么它应该在if运算符之前执行。因此,在执行if false
之前,应将5分配给x。
我误解了优先权吗?
答案 0 :(得分:1)
分配的优先级越高意味着您的表达式的计算结果为(x = 5) if false
,而不是x = (5 if false)
。注意,以后也是一个完全有效的表达式。
是否执行每个特定子句由语言规则决定。例如,在三元运算符a ? b : c
中,只会执行b
或c
,但不会同时执行。{/ p>
修改强>
关于差异。
在x = (5 if false)
中,首先处理分配。但要完成它,我们需要左侧部分,nil
,因为5 if false
评估为nil
。所以,表达式相当于x = nil
。
在(x = 5) if false
中,首先处理条件运算符。根据其规则,我们首先要评估条件(false
)。由于它是false
,因此无需再做任何事情,评估结果为nil
。
希望这很清楚。
答案 1 :(得分:0)
因为<expr> if <condition>
不是一个表达式。它是Ruby的特殊语法糖。它就像:
if <condition>
<expr>
end
显然,<expr>
必须仅在<condition>
后进行评估,因为<condition>
可以是false
。