Comportamiento extraño de la suma en la consola Ruby on Rails
-
25-10-2019 - |
Pregunta
¿Alguien ha notado algo como esto? ¿Por qué está sucediendo?
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
Usando ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]
&& Rails 3.1.3
Cosas adicionales:
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'
...
Solución
Esto depende del hecho de que en los espacios blancos rubí puede ser importante. Ves diferentes resultados porque Ruby interpreta tu ejemplo de diferentes maneras. Asi que
El primero:
"ayay".length + 1
es como
"ayay".length.+(1)
Y el segundo:
"ayay".length +1
es como
"ayay".length(+1)
De esta manera puedes ver Por qué Ruby da un error en el segundo caso.
Con respecto a contar Problema: Ruby interpreta el código como:
User.count(+1)
Y, como puede ver en el SQL generado, hay una diferencia porque +1
se considera el parámetro column_name.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow