2011-11-29 3 views
4

누구나 이런 식으로 눈치 채셨습니까? 왜 그런가? ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux] & & Rails 3.1.3레일 콘솔에있는 루비의 이상한 동작

추가 재료를 사용

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

이상. 그리고 "(User.count) +1"은 "103"을 반환합니다. Btw, 루비 1.8.7/레일 2.3.8에서 재현 가능하고 jruby/레일에서도 3.1 – buru

답변

5

. Ruby는 예제를 다른 방식으로 해석하기 때문에 다른 결과를 볼 수 있습니다. 그래서

첫 번째 :

"ayay".length + 1 

"ayay".length.+(1) 

그리고 두 번째 같다 :

"ayay".length +1 

"ayay".length(+1) 
같다

이렇게하면 을 참조하십시오. 두 번째 경우에 Ruby에서 오류가 발생하는 이유는 무엇입니까? count 문제에 관한

: 루비로 코드를 해석 : 당신이 생성 된 SQL에서 볼 수 있듯이,

User.count(+1) 

을 그리고, +1가 COLUMN_NAME 매개 변수로 간주되기 때문에 차이가 있습니다.

+0

괄호는 종종 당신을 구할 수 있습니다 :) – Bohdan

+0

예. 물론 사실입니다.) – lucapette

+0

응답 해 주셔서 감사합니다. 그럼에도 불구하고, 이상한 행동이 보인다 ... – fuzzyalej