我正在做一些事情,我觉得有点混淆&&
运算符功能。
当我这样做时
5 || 15
=> 5
nil || 15
=> 15
5 || nil
=> 5
但是当我用&&和操作
5 && 15
=> 15
nil && 15
=> nil
5 && nil
=> nil
有人可以帮我理解吗?
答案 0 :(得分:3)
ruby中的布尔运算符是短路的:如果可以从左侧参数确定表达式的值,则不会评估右侧参数。
因此,一个简单的心理模型用于评估涉及&&的布尔表达式。是考虑仅涉及两个操作数的第一个表达式:首先计算左侧操作数;如果此操作数的值为nil或false,则返回操作数,并且不评估右操作数;如果左侧操作数是其他任何内容,则评估右侧操作符并返回其值。
从这个定义中可以清楚地看出,正如您所注意到的,涉及布尔运算符的表达式不会返回true或false,而只是返回true值或false值。值得注意的是,在布尔表达式仅用于其真实性或假性的上下文中,这并没有任何区别。
希望它会对你有所帮助。