Странное поведение суммы в рубине на консоли рельсов - PullRequest
4 голосов
/ 29 ноября 2011

Кто-нибудь заметил что-то подобное?Почему это происходит?

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 

Использование ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux] && Rails 3.1.3

Дополнительные материалы:

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'
    ...

1 Ответ

5 голосов
/ 29 ноября 2011

Это зависит от того факта, что в Ruby пробелы могут быть значительными. Вы видите разные результаты, потому что Ruby интерпретирует ваш пример по-разному. Так

Первый:

"ayay".length + 1

похоже на

"ayay".length.+(1)

И второе:

"ayay".length +1

похоже на

 "ayay".length(+1)

Таким образом, вы можете увидеть , почему Ruby выдает ошибку во втором случае.

Относительно проблемы count : Ruby интерпретирует код как:

User.count(+1)

И, как вы можете видеть из сгенерированного SQL, есть разница, поскольку +1 считается параметром column_name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...