Почему 0 && 1 равно 1, а 1 && 0 равно 0 в рубине? - PullRequest
24 голосов
/ 11 марта 2012

Почему в Ruby следующие строки верны?

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

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

Ответы [ 3 ]

37 голосов
/ 11 марта 2012

Boolean И оператор && возвращает свой второй операнд, если first не равен false. 0 и 1 - true в логических выражениях в Ruby. Только nil и false являются ложными в логических выражениях.

nil && 15 # => nil
15 && 17 # => 17
15 && nil # => nil
7 голосов
/ 11 марта 2012

0 и 1 не представляют истинные значения в Ruby. В ruby ​​все, что не является nil или false, является истинным. Если добавить к этому, что:

Операторы and и && оценивают свой первый операнд. Если ложь, выражение возвращает ложь; в противном случае выражение возвращает значение второго операнда.

Получается, что вы оцениваете true && true и затем возвращается результат второго операнда Если бы вы написали 3 && 4, вы бы получили 4!

3 голосов
/ 11 марта 2012

В дополнение к отличным ответам здесь:

Вы, вероятно, путаете логические и битовые AND.

$ irb
1.9.3-p125 :001 > 1 & 0
 => 0 
1.9.3-p125 :002 > 0 & 1
 => 0 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...