2010-08-10 6 views

Répondre

18

Vous testez si les expressions sont vraies ou fausses. Essayez ceci:

if (self.expense.nil? == self.income.nil?) 

Peu importe qu'ils soient tous les deux vrais ou tous les deux faux, ils sont identiques.

+0

Merde, je ne savais pas que Ruby avait un opérateur XOR. C'est la dernière fois que je saute le chapitre de la syntaxe ennuyeuse! ;-) –

+0

@ Tom Morris: En fait, je pense que le xor n'est même pas nécessaire ici. Vérifiez ma mise à jour! –

+0

Yup. C'est mieux dans le contexte de la question. Mais je suis toujours reconnaissant pour l'apprentissage de l'opérateur XOR (^). –

0

Vous pouvez utiliser la loi de De Morgan pour la deuxième moitié de la condition if

si (!self.expense.nil? && !self.income.nil?) devient !(self.expense.nil? || self.income.nil?)

1

Malgré la logique, puisque vous utilisez un si pour vérifier zéro, vous pouvez raccourcir le code comme donc:

if ((expense && income) || (!expense && !income)) 
    puts "test" 
end 

Corrigez-moi si je me trompe.

+1

Un problème pouvant survenir * (en fonction des valeurs possibles pour les variables) est si l'une des variables est 'false'. Ensuite, l'if-statment d'origine renvoie un résultat différent du vôtre. Mais cela ne doit être pris en compte que si 'false 'est une valeur possible pour l'une des variables utilisées. – Ragmaanir

+0

bon point ... bien que selon la logique de l'entreprise, il peut encore bien fonctionner – tybro0103