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'
    ...
War es hilfreich?

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
scroll top