2010-08-02 4 views
-1

내가 생각 코드루비 비트 또는 여기

def tmp 

    a = ancestors.first(ancestors.index(ActiveRecord::Base)) 

    b = a.sum([]) { |m| m.public_instance_methods(false) | 
        m.private_instance_methods(false) | 
        m.protected_instance_methods(false) } 

    b.map {|m| m.to_s }.to_set 

end 

입니다 비트 OR 연산자입니다. 그렇다면 어떻게 b가 아닌 부울 값을 포함합니까?

답변

4

코드가 무엇을해야한다고 말하면 도움이되었지만 드디어 생각났습니다. 가지고있는 |은 전혀 OR 연산이 아니며 비트 연산도 논리 연산도 아닙니다. 배열 통합 작업입니다. Array rubydoc에서 찾으십시오. Array 인수를 취하고 배열에있는 모든 요소로 구성된 Array 결과를 제공합니다.

Ruby의 거의 모든 것이 (여기에는 관련이없는 블록이 아니라) 객체이므로, 간단한 할당을 제외하고는 절대적인 "연산자"가 없습니다. 모든 연산자는 사실 어떤 클래스에서 정의 된 메서드이므로 상황에 따라 정의됩니다.

또한 누군가가 올바르게 지적 했으므로 (비트 삭제됨) 비트 OR은 논리 값이 아닌 정수를 처리합니다 (7 | 12 == 15). Logical 또는 ||은 부울 값을 처리하지만 nilfalse을 제외한 모든 항목이 true이므로 엄격하지 않은 값을 반환 할 수도 있습니다. 따라서 7 || 12true이 아니라 7을 반환합니다 (대부분의 컨텍스트에서 여전히 true와 같습니다).

UPDATE : 나는 Boolean 객체에 사용될 때, 실제로 때문에 단락의 의미로, 루비에 을 정의 할 수 없습니다 ||&& 사실을 간과했습니다. 그럼에도 불구하고 이들은 Boolean의 메소드처럼 작동한다는 사실을 변경하지 않습니다.

+0

코드는 레일스 코드의 조각입니다. 미안 해요. –