Подтвердить что ты не робот

Почему 0 && 1 равно 1, а 1 && 0 - 0 в рубине?

В Ruby, почему следующие строки истинны?

0 && 1 == 1
1 && 0 == 0

Почему они разные и не равны 0?

4b9b3361

Ответ 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