Seltsames Verhalten der Summe in Ruby on Rails Console
-
25-10-2019 - |
Frage
Hat jemand so etwas bemerkt? Warum passiert es?
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
Verwendung ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]
&& Rails 3.1.3
Zusätzliches Zeug:
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'
...
Lösung
Dies hängt von der Tatsache ab, dass in rubinweißen Räumen kann sein von Bedeutung. Sie sehen unterschiedliche Ergebnisse, da Ruby Ihr Beispiel auf unterschiedliche Weise interpretiert. So
Der Erste:
"ayay".length + 1
ist wie
"ayay".length.+(1)
Und der zweite:
"ayay".length +1
ist wie
"ayay".length(+1)
Auf diese Weise können Sie sehen Warum Ruby im zweiten Fall einen Fehler angibt.
Bezüglich der zählen Problem: Ruby interpretiert den Code als:
User.count(+1)
Und wie Sie aus dem generierten SQL sehen können, gibt es einen Unterschied, weil +1
wird als Parameter column_name betrachtet.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow