2011-03-09 4 views
4

나는 공간이 동작을 변경 않는 방법이루비 : 방법 구문

@entries = [#<Entry id: 3806, approved: false, submitted: false] 

@entries.any?&:submitted? => true 
@entries.any? &:submitted? => false 

같은 공간을 남겨 버그에 달렸다. Entry.subitted? => 배열의 모든 요소에 대해 false이면 두 번째 줄에 원하는 동작이 있습니다.

+0

나를위한 작품, 1.8 및 1.9, 하찮은'클래스 항목; def가 제출 되었습니까? 진정한 엔드 엔드'. 문제를 재현 할 수있는 가능한 최소의 코드를 볼 수 있습니까? – pilcrow

+0

1.8.7 REE는 spave와 공간이 없으면 훌륭하게 작동합니다. [1,2, nil] .any? & : nil?'및'[1,2, nil] .any? & : nil? ' – fl00r

답변

18

&도 우선 순위가있는 단항 연산자이기 때문에 문제가 발생합니다. 이 작업을 수행 할 때

은 : 진정한 결과

(@entries.any?)&(:submitted?) 

: 당신은 실제로 일을

@entries.any?&:submitted? 

이있다. @ 항목에 엔트리가 있고 심볼이 제출 되었습니까? true의 진리 값을가집니다. 이 작업을 수행 할 때

는 :

@entries.any? &:submitted? 

는 당신이 실제로하고있는 것은 이것이다 :

당신이 정말로 원하는 것입니다
@entries.any?(&:submitted?) 

.

class Entry 
    def submitted? 
    false 
    end 
end 

PS : 다음 클래스를 사용하여, 그 결과를 재현하려면

class Entry 
    def submitted? 
    true 
    end 
end 

:

그의 일을 가지고 @pilcrow 이유는 그/그녀가 다음과 같은 클래스를 사용하고 있다는 점이다 동일 @ fl00r의 예 :

[1,2,nil].any?&:nil? and [1,2,nil].any? &:nil? 

[1,2, nil] .any? true가되고 nil? true의 진리 값을 가지므로 [1,2, nil]도 nil 값을 포함하므로 결과는 동일하지만 계산이 다릅니다.

+0

위대한 답변! +1 –

+0

아하! 좋은 대답. 비록 그것이 지금 명백하게 보일지라도, 내 머리를 긁어 주었다. –

+0

아, 그건 훨씬 더 의미가 있습니다! 고맙습니다! – loosecannon