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

Может ли кто-нибудь объяснить `not` vs`! `В ruby?

Я помню, где-то читал, что not и ! оцениваются по-разному, и я не могу найти его в рубиновой документации. Это правда? Являются ли они синонимами?

Хорошие ответы должны привести документацию.

4b9b3361

Ответ 1

Они почти синонимы, но не совсем. Разница в том, что ! имеет более высокий приоритет, чем not, как и && и || имеют более высокий приоритет, чем and и or.

! имеет самый высокий приоритет для всех операторов, а not один из самых низких, вы можете найти полную таблицу в документах Ruby.

В качестве примера рассмотрим:

!true && false
=> false

not true && false
=> true

В первом примере ! имеет самый высокий приоритет, поэтому вы эффективно говорите false && false.
Во втором примере not имеет более низкий приоритет, чем true && false, поэтому он "переключил" false с true && false на true.

Общее руководство, похоже, должно придерживаться !, если у вас нет конкретной причины использовать not. ! в Ruby ведет себя так же, как и большинство других языков, и "менее удивительно", чем not.