Hơi khó để thấy trong ví dụ này, rằng new Actor
được chuyển thành tham số "được đặt tên". Hãy suy nghĩ về nó như thể nó được chuyển thành một chức năng của loại () => Actor
. Hàm này sẽ được gọi mỗi lần diễn viên sẽ được (lại) tạo bởi người giám sát của nó trong khi khởi động lại.
Vấn đề là chức năng này là "đóng cửa" (rất dễ dàng với Google;)), có nghĩa là nó ghi lại và ghi nhớ mọi thứ trong phạm vi xung quanh mà nó cần (đôi khi, nhưng rất hiếm khi được gọi là "ngăn xếp ngăn xếp" "). Ví dụ: val f = (a: Int) => a + x
. x
xuất phát từ đâu? Nó xuất phát từ phạm vi xung quanh. Hàm litetal, được gán cho f
được gọi là "thuật ngữ mở". Khi thực thi hàm literal trở thành một giá trị hàm (đó là một cách ưa thích để nói "đối tượng"), khi thực hiện đóng cụm từ mở, trong khi chụp mọi thứ trong phạm vi xung quanh. Đó là nơi mà cái tên "đóng cửa" xuất phát từ đó.
Đóng cửa rất hữu ích, nhưng bạn phải cẩn thận những gì bạn đóng cửa. Đôi khi, x
là một số def
hoặc thần cấm var
, dẫn đến kết quả không thể đoán trước cho f
, bởi vì bạn không có quyền kiểm soát thời gian khi f
sẽ được gọi/thực thi. Hãy thử nó!
Hai chống paterns rất phổ biến trong Akka đang/đã:
- bế trên (bên ngoài) tham khảo
this
khi tạo một diễn viên từ một lớp bên trong.
- Đóng trên
def sender
khi trả lời thư có tương lai.
Tôi đưa cho bạn một loạt các thuật ngữ ưa thích để Google trên mục đích, btw;)
Chúc mừng và hạnh phúc mã hóa
Cảm ơn. Giàu giải thích. – Peter