2011-10-10 33 views
5

Khi tôi làm ví dụ:dấu + = điều hành trên Set bất biến

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

hãng hàng không là một Set không thay đổi.

+= không được xác định trên tính chất Tập bất biến.

Vì vậy, += là nhà điều hành tích hợp trong scala? Ý tôi là làm thế nào để scala biết phân công lại các hãng hàng không với set("Qantas", "JetStar", "Air NZ", "Virgin") mới?

Trả lời

14

Nếu nhà điều hành kết thúc bằng = (ví dụ: +=) được sử dụng nhưng không được xác định trên một lớp, trình biên dịch Scala sẽ giải thích điều này, ví dụ:

airlines = airlines + "Virgin" 

hoặc, đối với ++=, chúng tôi có

airlines ++= airlines 

khử đường vào

airlines = airlines ++ airlines 

Tất nhiên, như dmeister notes, điều này sẽ chỉ biên dịch nếu điều đó biểu hiện mới có ý nghĩa. Ví dụ: nếu chúng ta xử lý var s.

Xem Scala Reference §6.12.4 Assignment Operators
(<=, >=!= bị loại trừ vì trường hợp đặc biệt, như được mô hình cũng bắt đầu với =.)

+0

bạn có nghĩa là '+ =' không? hoặc chỉ '='? – Dzhu

+0

Tôi có nghĩa là kết thúc bằng '=', vì vậy điều này đúng với '+ =' hoặc '- =' hoặc '++ ='. ('<=' , '> =' và '! =' Được loại trừ dưới dạng các trường hợp đặc biệt, vì các mẫu cũng bắt đầu bằng '='.) – Debilski

3

Nhà điều hành += tạo ra một tập bất biến mới có chứa "Virgin" và gán các thiết lập mới với biến số airlines. Nói đúng đối tượng đã đặt hiện tại chưa thay đổi, nhưng tập hợp phản đối các biến hãng hàng không trỏ đến.

Do đó, điều quan trọng đối với việc này là làm việc mà hãng hàng không là biến số var và không phải là val, bởi vì bạn không thể gán lại cho biến số val.

Các vấn đề liên quan