在rails控制台上的红宝石中总和的奇怪行为

fuz*_*lej 4 ruby-on-rails-3.1

有没有人注意到这样的事情?为什么会这样?

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 
Run Code Online (Sandbox Code Playgroud)

使用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'
    ...
Run Code Online (Sandbox Code Playgroud)

luc*_*tte 5

这取决于在Ruby中空白空间可能很重要的事实.您会看到不同的结果,因为Ruby以不同的方式解释您的示例.所以

首先:

"ayay".length + 1
Run Code Online (Sandbox Code Playgroud)

就好像

"ayay".length.+(1)
Run Code Online (Sandbox Code Playgroud)

第二个:

"ayay".length +1
Run Code Online (Sandbox Code Playgroud)

就好像

 "ayay".length(+1)
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以看到 Ruby在第二种情况下出错的原因.

关于计数问题:Ruby将代码解释为:

User.count(+1)
Run Code Online (Sandbox Code Playgroud)

而且,正如您从生成的SQL中看到的那样,存在差异,因为它+1被认为是column_name参数.