2013-10-23 3 views
1

나는 이것이 의미하는 알거나무엇이 다른가요? 대 ||

true || false 
=> true 

그러나 다른 날 실수로 대신 하나의 수직선을 사용하고 내 코드는 여전히 일 것을 발견했다.

true | false 
=> true 

false | false 
=> false 

그래서 이러한 차이점은 무엇입니까? 및 || 그들은 동등한가?

답변

3

| 비트 OR 연산자입니다. || 논리 OR 연산자입니다.

두 연산자에 대한 설명은 여기를 참조하십시오. http://www.tutorialspoint.com/ruby/ruby_operators.htm.

+0

가 올바른지 그런 말을하는 것입니다 | |의 모든 기능을 포함합니다. 게다가 비트도 처리 할 수 ​​있습니까? – User314159

+0

@ User314159 아니요 - 내 대답을 참조하십시오. –

2

|비트 단위 OR 연산자입니다. ||논리적 OR입니다.

가장 큰 차이점은 시연 한대로 사용하면 ||은 누전되어 왼쪽 측면이 맞을 때 오른편을 평가하지 않는다는 것입니다. |을 사용하면 항상 양쪽을 평가합니다.

이 경우에는 그다지 중요하지 않지만 연산자의 양측이 계산하는 데 비용이 많이 든다면 ||이 더 효율적입니다.

논리적 테스트 (예 : "if")를 수행 할 때 ||을 사용하는 것이 거의 항상 좋은데, 이는 사용자의 의도를보다 명확하게 표현하고 잠재적으로 더 효율적이기 때문입니다.

| 연산자는 비트 조작을 직접 수행 할 때 더 유용하며 실제로는 일반적으로 일반적으로 해당 시나리오에만 적합합니다.

2

||은 논리 OR 연산자입니다.


a | ba.|(b) 같다. 따라서 의미는 a 클래스에 따라 다릅니다.

첫 번째 피연산자가 Fixnum : Fixnum#|이면 비트 단위로 OR 연산을 수행합니다.

논리 OR 제 피연산자 true 또는 false 인 경우 TrueClass#|, FalseClass#|; ||, | 두 피연산자가 모두 true/false 인 경우 동일한 결과가 나타납니다.

NilClass#| ...


다른 차이점 : || 단락 |하지 않지만.예를 들어

:

def f1 
    p 'f1 called' 
    true 
end 

def f2 
    p 'f2 called' 
    true 
end 

p(f1 || f2) 
# => "f1 called" 
# true 

p(f1 | f2) 
# => "f1 called" 
# "f2 called" 
# true 

1 || 2 # return first non-false/nil value. 
# => 1 
nil || 1 
# => 1 

1 | 2 # 0b01 | 0b10 => 0b11 = 3 
# => 3 
>> nil | 1 
# => true 
1 | nil 
# => TypeError: nil can't be coerced into Fixnum 
#   from (irb):7:in `|' 
#   from (irb):7 
#   from C:/Ruby200-x64/bin/irb:12:in `<main>' 
관련 문제