有人可以解释如何解释以下红宝石块的摘录吗?
s = "one"
s.length > 1 && s.reverse! || s
返回
"eno"
该表达式如何替换if
- else
- 语句?
答案 0 :(得分:2)
如果左侧的表达式评估为真值(除&&
或nil
之外的任何值),则false
运算符右侧的表达式仅被计算。这称为short-circuit evaluation。基本思想是,如果左侧评估为false,我们知道&&
运算符的整体值将为false,所以让我们通过甚至不评估表达式来节省一些CPU时间(并避免一些副作用)在右边。
所以行
s.length > 1 && s.reverse!
相当于
if s.length > 1
s.reverse!
end
答案 1 :(得分:1)
当s.length > 1
真实时,会对s.reverse!
进行评估以确定其是否真正进一步真实。如果是,则s.length > 1 && s.reverse!
被评估为真实。在这种情况下,不评估s
。否则,将评估s
。
所以它与
不一样if s.length > 1
s.reverse!
else
s
end
但与
相同if s.length > 1 and s.reverse!
else
s
end