(마틴 오더 스키, 제 2 판)에 그들은이 연산자 우선 순위 테이블 (여기을 완료 할)을 얻었다 :연산자 우선 순위 및 | 스칼라
*/%
+ -
:
= !
< >
&
^
|
그래서 경우의 첫 번째 문자 연산자는이 테이블에서 다른 연산자의 첫 번째 문자 인 이전 연산자가 먼저 평가된다는 높은 위치에 있습니다.
가에 따르면,이 코드는 yy
를 인쇄해야하지만 x
를 출력 :
def x() = { print('x'); true }
def y() = { print('y'); true }
x || y && y // prints `x` but should `yy`
나의 이해는 그 & 테이블에서 높은 경우 그 | 인 경우 먼저 평가해야합니다. *은 +보다 우선합니다. 따라서 x + y * y
에 마지막 문장이 먼저 평가됩니다.
편집 : 그들 표에 따라 권리 그러나 "로 해결할 수있는 문제"왼쪽에서 그들을 평가처럼
는 또한이 코드를
def x() = { print('x'); 1 }
def y() = { print('y'); 3 }
x == x + y * y // xxyy
봐 봐.
두 번째 경우에는'x'와'y'가'Int'가되고 부울의 경우에는 다른 평가 모델을 사용하기 때문에 – 4lex1v
'|'은'||'와 같지 않으며 책에서 제공하지 않습니다 논리적 피연산자의 우선 순위 나는'&&'가 여전히'||'보다 높지만 여기서 작업에서 단락이 발생하는 자바와 같은 우선 순위가 사용된다고 가정합니다. Java는 'x'도 인쇄합니다. – maksimov