두 시험이다 :우선 순위 여기
if [1,2,3,4].include? 2 && nil.nil?
puts :hello
end
#=>
및
if [1,2,3,4].include?(2) && nil.nil?
puts :hello
end
#=> hello
위 &&
논리적으로의 ands 2 && nil.nil?
그것 때문에 메소드 인수보다 높은 우선 순위를 가지고 있음을 알려줍니다 그것은 진실이고 이것을 인수로 포함시키는 것입니다.
그러나,이 테스트가 :
if [1,2,3,4].include? 2 and nil.nil?
puts :hello
end
#=> hello
그래서 이것이 나에게 그 메소드 인자와 말하는 'and
은'우선 순위가 동일 (또는 메소드의 인수는 'and
'보다 높은)는 2를 통과하기 때문에 포함? 처리하기 전에 '및'.
참고 : &&
과 and
의 우선 순위가 다릅니다. 문제는 이것에 관한 것이 아니라 and
또는 or
에 대해서 루비 메서드에 대한 인수와 관련됩니다.
나는 이것을 확인하는 문서를 찾을 수 없습니다. 인스턴스의 경우 메서드 인수에 대해서는 전혀 언급하지 않았습니다. http://phrogz.net/programmingruby/language.html#table_18.4 또는 http://romhack.wikia.com/wiki/Ruby_operators입니다.
누구든지이 동작을 설명 할 수 있습니까? 즉 루비는 메소드 대 프로세스 연산자에 인수로서 값을 전달하는 것을 어떻게 알고 있습니까?
구문 분석의 일부로'및'과'&'는 다른 우선 순위를 갖습니다. 일단 괄호가없는 메소드를 호출하면 꽤 빠르게 복잡해 지지만, 무언가가 첫 공백 인 iirc의 인수라고 생각하지 않게 될 것입니다. 또는 다른 방법. –
이러한 혼란을 피할 수있는 나의 경험 법칙 : 필요없는 경우에도 인수를 사용하여 메서드를 호출 할 때 괄호를 포함하고'and' 또는'or'를 사용하지 마십시오. 루비 사람들은 괄호에 대한 병리학 적 두려움을 가지고있는 경향이 있습니다. 그래서 그들을 사용하면 더러운 표정이 많이 들지만 걱정하지 않습니다.시는 혼란스러운 시도보다는 읽을 수 있습니다. –
+ 1. Ruby의 이러한 동작이 Perl을 모델로하는 한, Perl의 연산자 우선 순위 차트가 도움이 될 수 있습니다. http://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity를 참조하십시오. 이 차트에는 "왼쪽"과 "오른쪽"우선 순위가 다른 함수 호출이 포함됩니다. (예를 들어'1 && foo 2 && 3'는'1 && (foo (2 && 3))'를 의미합니다. - 함수 호출은 첫 번째'&&'보다 우선 순위가 높지만 두 번째'&&' 물론 루비에게는 차트가 원격으로 권한이 부여되지 않는다. – ruakh