2011-10-10 4 views
5

+ = 연산자를 수행 할 때내가 예컨대 불변 세트에

var airlines = Set("Qantas", "JetStar", "Air NZ") 
airlines += "Virgin" 

항공사 불변 설정된다.

+=은 불변 Set 특성에 정의되어 있지 않습니다.

따라서 +=은 스칼라의 기본 제공 연산자입니까? 스칼라가 새로운 항공기를 재 할당하는 방법을 알고 있습니다. set("Qantas", "JetStar", "Air NZ", "Virgin")?

답변

14

=으로 끝나는 연산자 (예 : +=)가 클래스에서 사용되지만 정의되지 않은 경우 Scala 컴파일러는 이것을 예 :

airlines = airlines + "Virgin" 

또는 ++=, 우리는
airlines ++= airlines 

그 새로운 표현이 의미가있는 경우 dmeister notes,이 단지 컴파일, 물론

airlines = airlines ++ airlines 

에 desugared있을 것입니다. 예를 들어 var 초를 처리 할 경우

Scala Reference §6.12.4 Assignment Operators
(패턴도 =부터 시작되므로 <=, >=!=는 특별한 경우로 배제된다.)를 참조 += 오퍼레이터 "Virgin"을 포함하는 새로운 불변 ​​세트를 생성하고 새로운 세트를 할당

+0

'+ ='을 의미합니까? 아니면 그냥 '='? – Dzhu

+0

'='로 끝나는 것을 의미하므로'+ ='또는'- ='또는'++ ='에 대해서도 마찬가지입니다. ('<=' , '> ='및'! ='는 특별한 경우로 제외되며'= '로 시작하는 패턴도 마찬가지입니다.) – Debilski

3

변수 airlines. 엄밀히 말하면 기존 세트 오브젝트는 변경되지 않았지만 세트는 항공사가 가리키는 변수를 거부했습니다.

val 변수로 재 할당 할 수 없으므로 항공사가 var 변수이고 val 변수가 아닌 것은 작동하는 것이 중요합니다.