3
Why does the + function appear to work on tuples?을 조사한 후 다음과 같은 질문이 있습니다.비트 연산자와 (x, y) 호출
누군가 Base.:&(1,2)
이 작동하지만 왜 &(1,2)
이 실패하는지 설명 할 수 있습니까? 동시에 Base.:|(1,2)
과 |(1,2)
이 모두 작동합니다.
Why does the + function appear to work on tuples?을 조사한 후 다음과 같은 질문이 있습니다.비트 연산자와 (x, y) 호출
누군가 Base.:&(1,2)
이 작동하지만 왜 &(1,2)
이 실패하는지 설명 할 수 있습니까? 동시에 Base.:|(1,2)
과 |(1,2)
이 모두 작동합니다.
단 하나의 연산자로 &
이 ccall
구문 (비록 this syntax is deprecated now)에서 사용되었으므로 간단히 그 이유는 단항 연산자로 특수 형식입니다. 따라서 &(1, 2)
은 Expr(:&, :(1, 2))
으로 구문 분석됩니다.
|
정도로 |(1, 2)
는 1 | 2
함수 호출로 파싱 단항 연산자 아니다. +(1, 2)
및 -(1, 2)
가 2 개의 인수를 함수 호출로 분석 할 수 있도록+
및 -
은 특별한 경우 구문 분석 규칙이 (그렇지 않으면 실행시 오류 것 기능이 튜플에 호출 한 인수 될 것이다). &
은 일반 규칙이 아닌 특수한 형식이므로이 규칙의 적용을받지 않습니다.Base.:&
은 연산자로 파싱되지 않고 식별자에 대한 일반적인 필드 참조입니다. 따라서 여기서 모호성이 없으며 일반 함수 호출과 같이 구문 분석됩니다. 마찬가지로 (&)(1, 2)
은 일반 함수 호출로 구문 분석됩니다. (&)
이 일반 식별자로 구문 분석되기 때문입니다.
훌륭한 설명에 감사드립니다. –