답변:
and우선 순위&& 가 낮지 만 동일 합니다. 둘 다 단락 평가를 사용 합니다.
경고 : and우선 순위가 낮 =으므로 일반적으로 피하는 것이 and좋습니다. and사용되어야 할 경우의 예 는 Rails Guide에서 " Double Render 오류 방지 "에 있습니다.
&&동안, and아주 특별한 경우에만 사용되어야한다.
and반대의 같다 if문 수정 : next if widget = widgets.pop되고 widget = widgets.pop and next그 퍼팅의 좋은 방법, 정말 그것을했다."내 머리에 "클릭 (그리고. or반대의처럼 unless수정.)
실제적인 차이점은 구속력이며, 준비되지 않은 경우 특이한 행동을 유발할 수 있습니다.
foo = :foo
bar = nil
a = foo and bar
# => nil
a
# => :foo
a = foo && bar
# => nil
a
# => nil
a = (foo and bar)
# => nil
a
# => nil
(a = foo) && bar
# => nil
a
# => :foo
같은 기능이 ||및에 적용 or됩니다.
a = foo and bar 그리고 (a = foo ) && bar 그 증명 and보다 낮은 우선 순위를가집니다 &&.
a = foo and bar와 같습니다 (a = :foo) and nil. 대입이 논리적으로 true 값 ( :foo)을 반환하므로 두 번째 부분이 평가되고 실패하면을 반환 nil합니다.
루비 스타일 가이드는 내가 할 수있는 것보다 더 잘 말한다 :
&& / || 사용 부울 식 및 / 또는 제어 흐름. (엄지 규칙 : 외부 괄호를 사용해야하는 경우 잘못된 연산자를 사용하고 있습니다.)
# boolean expression
if some_condition && some_other_condition
do_something
end
# control flow
document.saved? or document.save!
and하거나 or완전히 피하 라고 지시 하며, 요점을 가질 수 있습니다. 종종 제어 흐름에서의 사용은 더 분명 작성 할 수 if/ unless사업자 (예 : 어쨌든 document.save! unless document.saved?)
||와 &&결합하면 프로그래밍 언어에서 부울 연산자에서 기대하는 우선 순위가 ( &&매우 강하고 ||약간 덜 강하다).
and및 or낮은 우선 순위를 가지고있다.
예를 들어, 달리 ||, or보다 낮은 우선 순위를가집니다 =:
> a = false || true
=> true
> a
=> true
> a = false or true
=> true
> a
=> false
이와 달리 &&, and또한보다 낮은 우선 순위를가집니다 =:
> a = true && false
=> false
> a
=> false
> a = true and false
=> false
> a
=> true
더 달리 무엇 &&과 ||, and그리고 or바인딩과 동일한 우선 순위 :
> !puts(1) || !puts(2) && !puts(3)
1
=> true
> !puts(1) or !puts(2) and !puts(3)
1
3
=> true
> !puts(1) or (!puts(2) and !puts(3))
1
=> true
약하게 바인딩 and되며 or제어 흐름 목적에 유용 할 수 있습니다 . http://devblog.avdi.org/2010/08/02/using-and-and-and-or-in-ruby/를 참조 하십시오 .
||, or보다 낮은 우선 순위가 ="... 지금은 덕분에 더 의미가 있습니다!
and보다 우선 순위가 낮습니다 &&.
그러나 가정하지 않은 사용자의 경우 할당 연산자와 같이 우선 순위가 다른 연산자와 함께 사용하면 문제가 발생할 수 있습니다.
def happy?() true; end
def know_it?() true; end
todo = happy? && know_it? ? "Clap your hands" : "Do Nothing"
todo
# => "Clap your hands"
todo = happy? and know_it? ? "Clap your hands" : "Do Nothing"
todo
# => true
and우선 순위가 낮으며 주로 다음과 같은 제어 흐름 수정 자로 사용합니다 if.
next if widget = widgets.pop
된다
widget = widgets.pop and next
의 경우 or:
raise "Not ready!" unless ready_to_rock?
된다
ready_to_rock? or raise "Not ready!"
내가 사용하는 것을 선호 if하지만 and때문에, if더 이해할 수 있습니다 난 그냥 무시 있도록 and하고 or.
자세한 내용은 " Ruby에서"및 "및"또는 "사용 "을 참조하십시오.
이것이 Ruby 의도인지 또는 이것이 버그인지는 모르지만 아래 코드를 사용해보십시오. 이 코드는 Ruby 버전 2.5.1에서 실행되었으며 Linux 시스템에서 실행되었습니다.
puts 1 > -1 and 257 < 256
# => false
puts 1 > -1 && 257 < 256
# => true
or||도 참조하십시오 .