7
votes

! 0 est faux dans les rails. Pourquoi?

Je viens de passer à travers un bogue troublant dans la demande de mes rails et j'ai découvert que le problème était que! 0 était faux. Je suppose que cela devrait être vrai.

J'étais sous l'impression que! L'opérateur renverrait les morceaux dans un entier de qualité pour 0 deviendrait tous les 1 et ce serait vrai. P>

Ce n'est pas le cas, pourquoi? p>

NOTE DE LA CONSOLE DE RAILS: P>

1.9.3p286 :002 > !0
 => false 
1.9.3p286 :003 > 0
 => 0 
1.9.3p286 :004 > !1
 => false 
1.9.3p286 :005 > !!0
 => true 
1.9.3p286 :006 > !0
 => false 
1.9.3p286 :007 > !23
 => false 


4 commentaires

De wikipedia ( fr.wikipedia.org/wiki/ruby_%28Programming_language%29 ): "L'évaluation booléenne de données non booléennes est stricte: 0," "et [] sont tous évalués à vrai."


Du Documents officiels: Ruby-Doc.org/docs/programmingRuby /html/tut_expressions.html# uf


Le fonctionnement du bit n'est pas pertinent.


Dupliqué possible de Pourquoi traiter 0 comme vrai dans Ruby?


3 Réponses :


13
votes

parce que 0 n'est pas équivalent à false . 0 est une valeur entière et la valeur booléenne de tous les entiers est true . Les seules choses qui évaluent à false sont nil et, explicitement, false .

donné que 0 est true , ! 0 est, intuitivement, false . .

! n'est pas un opérateur bit-sage, il s'agit d'un non . Peut-être que vous vouliez dire ~ 0 ?


3 commentaires

Merci ANT P. Je ne savais pas que la valeur booléenne de 0 est vraie dans Ruby. Je suppose que la valeur booléenne de 0 est fausse.


Cette réponse est fortement trompeuse. Que ce soit ou non 0 équivaut à false n'est pas pertinent. nil n'est pas équivalent à false , mais est falués. Il n'y a pas non plus de "valeur booléenne de (tous) entiers", et est également trompeur pour écrire comme si 0 est vrai ; Ce n'est pas vrai , mais est de la vérité. Et nil n'évalue pas à false ; c'est faltes. Dans l'ensemble, votre réponse est très imprécise et trompeuse.


J'ai utilisé les termes "Truthy" et "FALSY" comme sténographique pour "satisfaire une condition" et "ne pas satisfaire une condition". Je ne pense pas que ce n'est pas clair, pas plus que cela ne sera déroutant avec aucun objet rubis. Ce qui est problématique avec votre réponse, c'est que vous avez référé à Ruby Objects true et false (avec BackQuotes) et écrit comme si des choses autres que cela leur équivalent. C'est clairement faux. 0 == true est false , pas vrai . Vous avez écrit comme s'il est.



6
votes

Dans Ruby, il n'y a que deux valeurs qui évaluent à FALSE dans les expressions logiques: FALSE et NIL. Depuis 0 n'est ni d'entre eux, il est évalué à vrai et donc! Vrai équivaut à faux.


0 commentaires

4
votes

de Ce blog

La plupart des objets de Ruby auront une valeur booléenne de vrai. Seulement deux les objets ont une valeur booléenne de faux, ce sont le faux objet lui-même et l'objet NIL.

de sorte que tout entier (même 0) a une valeur booléenne true . Et ainsi ! 0 évalue vers false


0 commentaires