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