name = Foo || "Bar"
逻辑运算符在编程中再常见不过, 但是上面这段ruby代码是给name判断真伪呢?还是给name赋值呢?
基本概念
A || B
: A B之中只要有一个是真, 表达式则为真。
A && B
: A B都为真, 表达式才为真。
我经常会用逻辑运算符来简化条件判断
//php代码
if (A) {
if (B) {
echo "foo";
}
}
//使用逻辑运算符
if (A && B) {
echo "foo";
}
返回值
要知道开头那段代码的答案, 就要先了解逻辑运算符的返回值
在php中, 逻辑运算符返回的是boolean
>>> "123" || "abc"
=> true
但是在ruby中, 当判断为真时, 逻辑运算符返回的则是表达式的值
2.3.0 :001 > "123" || "abc"
=> "123"
对于||
来说, ruby会按照从左到右的顺序, 返回第一个为真的表达式的值
其实在js, 和python中, 与ruby一样也是返回表达式的值
//js
"123" || "abc"
> "123"
//python
>>> "123" || "abc"
'123'
运用逻辑运算符赋值
name = Foo || "Bar"
name = "Bar"
name = Foo if Foo
上面的这段代码就是给name赋值, 上面的两段代码是等价的