web-dev-qa-db-fra.com

Différence entre `not` et`! `In ruby

Je me souviens d'avoir lu quelque part que not et ! sont évalués différemment et je ne le trouve pas dans la documentation. Sont-ils synonymes?

78
0112

Ils sont presque synonymes, mais pas tout à fait. La différence est que ! a une priorité plus élevée que not, un peu comme && et || ont une priorité supérieure à and et or.

! a la priorité la plus élevée parmi tous les opérateurs, et not l'un des plus bas, vous pouvez trouver la table complète à la Ruby docs .

À titre d'exemple, considérons:

!true && false
=> false

not true && false
=> true

Dans le premier exemple, ! a la priorité la plus élevée , donc vous dites effectivement false && false.
Dans le deuxième exemple, not a une priorité inférieure à true && false, donc ceci "a changé" le false de true && false à true.

La ligne directrice générale semble être que vous devriez vous en tenir à !, sauf si vous avez une raison particulière d’utiliser not. ! in Ruby se comporte comme la plupart des autres langues et est "moins surprenant" que not.

111
Brennan

Un moyen simple de comprendre l’opérateur not consiste à considérer not true && false Comme étant équivalent à !(true && false)

8
roniegh