strano comportamento della somma in Ruby on rails console
-
25-10-2019 - |
Domanda
ho nessuno ha notato qualcosa di simile? Perché accade?
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
Utilizzando ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]
&& Rails 3.1.3
roba Extra:
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'
...
Soluzione
Questo dipende dal fatto che in Ruby spazi bianchi può essere significativo. Si vede risultati diversi perché Rubino interpreta il vostro esempio in modi diversi. Quindi
La prima:
"ayay".length + 1
è come
"ayay".length.+(1)
E la seconda:
"ayay".length +1
è come
"ayay".length(+1)
In questo modo è possibile vedere perché rubino dà un errore nel secondo caso.
Per quanto riguarda il conteggio problema: Rubino interpreta il codice come:
User.count(+1)
E, come si può vedere dal codice SQL generato, v'è una differenza perché +1
è considerato il parametro nome_colonna.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow