comportement bizarre de somme en ruby ??sur rails console
-
25-10-2019 - |
Question
Quelqu'un at-il remarqué quelque chose comme ça? Pourquoi est-il passe?
ruby-1.9.2-p290 :006 > User.count
(0.4ms) SELECT COUNT(*) FROM "users"
=> 102
ruby-1.9.2-p290 :007 > User.count + 1
(0.4ms) SELECT COUNT(*) FROM "users"
=> 103
ruby-1.9.2-p290 :008 > User.count+ 1
(0.4ms) SELECT COUNT(*) FROM "users"
=> 103
ruby-1.9.2-p290 :009 > User.count+1
(0.4ms) SELECT COUNT(*) FROM "users"
=> 103
ruby-1.9.2-p290 :010 > User.count +1
(0.5ms) SELECT COUNT(1) FROM "users"
=> 102
Utilisation ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]
&& Rails 3.1.3
Extra stuff:
ruby-1.9.2-p290 :007 > "ayay".length + 1
=> 5
ruby-1.9.2-p290 :008 > "ayay".length +1
ArgumentError: wrong number of arguments(1 for 0)
from (irb):8:in `length'
...
La solution
Cela dépend du fait que dans les espaces blancs Ruby peut être significative. Vous voyez des résultats différents parce que Ruby interprète votre exemple de différentes façons. Donc,
Le premier:
"ayay".length + 1
est comme
"ayay".length.+(1)
Et le second:
"ayay".length +1
est comme
"ayay".length(+1)
De cette façon, vous pouvez voir pourquoi Ruby donne une erreur dans le second cas.
En ce qui concerne le problème: Ruby interprète le code comme:
User.count(+1)
Et, comme vous pouvez le voir sur le SQL généré, il y a une différence parce +1
est considéré comme le paramètre column_name.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow