Что не так с этим простым логическим выражением в Ruby?

Вот мой код Ruby 3.2:

puts (1 and 0)
puts (1 and 0 and 1)

Он печатает 0, а затем 1 (я ожидаю 0 в обоих случаях). Может кто-нибудь объяснить, почему?

Числа 1 и 0 не являются логическими значениями в Ruby. Они оба trueish находятся в Ruby, поэтому Ruby просто возвращает последнее значение из каждого оператора. Если вместо этого вы используете true и false, обе версии вернут false. Кстати. в логических выражениях использование && вместо and было бы более идиоматично.

spickermann 18.06.2024 13:01
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
0
1
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Прежде всего, and и or имеют очень низкий приоритет и предназначены для потока управления, например.

do_this or exit

(при условии, что do_this вернет правдивый результат в случае успеха)

Для логических операций вместо этого следует использовать && и ||.

Далее, в Ruby есть два ложных значения: false и nil. Любое другое значение считается правдивым, включая 0.

Возможно, вы ищете:

true && false
#=> false

true && false && true
#=> false

true && true && true
#=> true

Если вы работаете с 1 и 0, вам могут пригодиться битовые операции: (см. Integer#&)

1 & 0
#=> 0

1 & 0 & 1
#=> 0

1 & 1 & 1
#=> 1

Другие вопросы по теме