2009-06-29 8 views
13

Tôi vừa mới nhìn thấy lớp trường hợp này trong Scala actors gói:Mẫu kết hợp lớp học này hoạt động như thế nào?

case class ! [a](ch: Channel[a], msg: a) 

Và trong javadoc nó mô tả cách sử dụng trong các hình thức sau đây:

receive { 
    case Chan1 ! msg1 => ... 
    case Chan2 ! msg2 => ... 
} 

Tại sao điều này không:

receive { 
    case !(Chan1, msg1) => ... 
    case !(Chan2, msg2) => ... 
} 

Là toán tử bang! một trường hợp đặc biệt theo cách tương tự với các phương thức kết thúc bằng dấu hai chấm:

Trả lời

33

Khi thực hiện khớp mẫu, trình biên dịch Scala sẽ giải thích o1 c1 o2 giống như c1(o1, o2). Đó là lý do tại sao :: hoạt động bên trong các đối sánh mẫu.

+2

Chúc mừng cho câu trả lời. Một sự xấu hổ không có nhiều điểm để trả lời câu hỏi của Scala! –