Je suis sûr qu'il me manque quelque chose ici mais néanmoins.Pourquoi ce Ruby 'si' ne se comporte pas comme prévu?
foo['bar'] = nil
if(foo['bar'] == nil)
puts "foo bar is nil :("
Cependant, rien ne se passe? Des pensées?
Je suis sûr qu'il me manque quelque chose ici mais néanmoins.Pourquoi ce Ruby 'si' ne se comporte pas comme prévu?
foo['bar'] = nil
if(foo['bar'] == nil)
puts "foo bar is nil :("
Cependant, rien ne se passe? Des pensées?
Vous avez besoin d'une déclaration end
fermer votre if
-à-dire
if(foo['bar'] == nil)
puts "foo bar is nil :("
end
Notez qu'il existe une méthode nil?
pour vérifier si quelque chose est nil
et les crochets autour de votre état ne sont pas nécessaires pour qu'il serait plus idiomatiques Ruby à écrire:
if foo['bar'].nil?
puts "foo bar is nil :("
end
comme Arkku a commenté, une seule ligne if
peut être écrit de manière concise comme:
puts "foo bar is nil :(" if foo['bar'].nil?
Ce qui est préférable dépend du contexte (par ex. voulez-vous souligner la condition ou souligner ce qui se passe si la condition est vraie) et une certaine quantité de préférence personnelle. Mais à titre d'exemple, vous pouvez mettre une condition de garde au début d'une méthode, par ex.
raise "bar needed" if foo['bar'].nil?
irb(main):002:0> foo = {}
=> {}
irb(main):003:0> foo['bar'] = nil
=> nil
irb(main):004:0> foo['bar']
=> nil
irb(main):005:0> if foo['bar'] == nil
irb(main):006:1> puts "foo bar nil"
irb(main):007:1> end
foo bar nil
=> nil
est nul traiter exactement comme faux dans un état. Vous n'avez donc pas besoin de tester si votre variable est vraiment nulle.
foo = {}
foo['bar'] = nil
puts "foo bar is nil :(" unless foo['bar']
puts "foo bar is nil :(" if !foo['bar']
En ruby, juste nil et faux retour faux dans l'énoncé de condition.
Bien sûr, il peut parfois être souhaitable de différencier entre zéro et faux, par ex. ici le message imprimé serait faux pour faux, affirmant qu'il était nul. – Arkku
"nil == false" est trompeur parce qu'ils ne sont pas égaux. Ruby traite zéro comme un faux résultat conditionnel. –
Oui, vous avez raison, c'est un peu trop – shingara
Le problème était avec ruby lui-même (ne va pas dans les détails), mais marqué comme répondu que là où de très bonnes réponses. –