我在做某事,发现&&
操作员功能有点混乱。
当我做
5 || 15
=> 5
nil || 15
=> 15
5 || nil
=> 5
但是当我使用 && 运算符时。
5 && 15
=> 15
nil && 15
=> nil
5 && nil
=> nil
有人可以帮我理解吗?
ruby 中的布尔运算符是短路的:如果可以从左侧参数确定表达式的值,则不计算右侧参数。
因此,对涉及 && 的布尔表达式求值的更简单的心智模型是考虑仅涉及两个操作数的第一个表达式:首先计算左侧的操作数;如果此操作数的值为 nil 或 false,则返回操作数并且不计算右侧操作数;如果左边的操作数是其他任何东西,则计算右边的运算符并返回它的值。
从这个定义中,很明显,正如您所注意到的,涉及布尔运算符的表达式不返回 true 或 false,而只是返回 true 值或 false 值。值得注意的是,这在布尔表达式仅用于其真假的上下文中没有任何区别。
希望它会帮助你。