2013-03-13 3 views
24

연관 작업이 >>입니다. 문제는 그 비용이 왼쪽 피연산자의 크기에 선형 적으로 의존한다는 것입니다. 기본적으로 중위 연산자 left-associative이기 때문에 그래서 표현은오른쪽 연관 삽입 연산자를 만드는 방법은 무엇입니까?

a >> a >> a >> a >> a >> ... >> a 

n의 측면에서 차 비용이 같은 >>n 응용 프로그램의 순서에 의해 형성. 그러한 표현의 비용이 n의 관점에서 선형으로 유지되도록 올바른 연관성을 만드는 방법은 무엇입니까?

+0

으로 정의해야합니다. 일반적으로 자체 응답이 권장됩니다. 동시에 질문과 답변을 게시하는 데에도 적용됩니까? 나는 대답을 게시하려했으나 더 좋은 대답을 준비 했으므로 시간 낭비였습니다. 귀하의 질문과 답변은 모두 잘 쓰여졌지만 잘 알려진 사실을 평판에 돌리는 인상을 남깁니다. 그럼에도 불구하고, * 필자가 깨닫는 데 시간이 좀 걸렸다 ... *는 아이러니 한 감동을 더한다. :). – bluenote10

+2

@ bluenote10 답변을 얻지 못한 채로 SO를 검색 했으므로이 질문을 쓰기로 결심했습니다. 나는 그것을 거의 준비해 봤지만, 해결책을 찾기 위해 조금 더 검색하려고 주저하고 노력했습니다. 나는':'을 사용하는 것에 대해 약간의 발언을 발견했고, 결국에는 스칼라의 레퍼런스에서 해결책을 발견하고 그것을 나의 경우에 적용했다. 질문을 무시하고 결과를 공유하지 않기 위해 낭비하는 것처럼 보였습니다. 그래서 나는 둘 다 (동시에) 게시했습니다. –

+0

나는 SO에 가치를 더한다는 것에 전적으로 동의한다 (둘 다 upvoted). 나는 이것이 OP가 정말로 대답을 찾고 있다고 가정 할 때 사용자에게 약간 짜증나게 할 수 있기 때문에 이것이 공식적으로 권장되는지 여부를 알고 싶었습니다. 그것에 대한 공식적인 정보를 찾지 못했습니다. – bluenote10

답변

42

A 해결책을 찾았습니다. 스칼라 참조 6.12.3 중위 운영 말한다 :

연관성 운영자의이 운영자의 마지막 문자에 의해 결정된다. 콜렉터 ':'로 끝나는 연산자 은 오른쪽 연관입니다. 다른 모든 연산자는 왼쪽 연관입니다.

그러므로 >>>>:으로 바꿉니다.

a.>>(b)으로 내 보낸 동안 a >>: bb.>>:(a)으로 내 보낸다는 것을 깨닫는 데 시간이 걸렸습니다. 그래서 >>:

def >>:(x: T): T = x >> this