Ruby在Rails Console上的总和的怪异行为
-
25-10-2019 - |
题
有没有人注意到这样的事情?为什么会发生?
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'
...
解决方案
这取决于红宝石白空间中的事实 可 重要的。您会看到不同的结果,因为Ruby以不同的方式解释了您的示例。所以
首先:
"ayay".length + 1
就好像
"ayay".length.+(1)
第二:
"ayay".length +1
就好像
"ayay".length(+1)
这样你就可以 看 为什么Ruby在第二种情况下给出错误。
关于 数数 问题:Ruby将代码解释为:
User.count(+1)
而且,正如您从生成的SQL中看到的那样,存在区别,因为 +1
被视为column_name参数。
不隶属于 StackOverflow