Я помню, где-то читал, что not и ! оцениваются по-разному, и я не могу найти его в рубиновой документации. Это правда? Являются ли они синонимами?
Хорошие ответы должны привести документацию.
Ответ 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.