Почему 0 && 1 равно 1, а 1 && 0 - 0 в рубине?
В Ruby, почему следующие строки истинны?
0 && 1 == 1
1 && 0 == 0
Почему они разные и не равны 0?
Ответы
Ответ 1
Оператор Boolean AND &&
возвращает свой второй операнд, если сначала не false. 0
и 1
являются true
в булевых выражениях в Ruby. Только nil
и false
являются ложными в булевых выражениях.
nil && 15 # => nil
15 && 17 # => 17
15 && nil # => nil
Ответ 2
0
и 1
не представляют значения истинности в Ruby. В рубине все, что не является nil
или false
, истинно. Если вы добавите к этому, что:
The & and && операторы оценивают свой первый операнд. Если false, выражение возвращает false; в противном случае выражение возвращает значение второго операнда.
Вы получаете, что вы оцениваете true && true
, а затем возвращается результат второго операнда. Если вы написали 3 && 4
, вы получили бы 4
!
Ответ 3
В дополнение к отличным ответам здесь:
Вероятно, вы путаете логические логические и побитовые.
$ irb
1.9.3-p125 :001 > 1 & 0
=> 0
1.9.3-p125 :002 > 0 & 1
=> 0