Hãy xem xét hai đặc điểm sau đây:Soạn hành vi đặc điểm trong Scala trong một Akka nhận phương pháp
trait Poked extends Actor {
override def receive = {
case Poke(port, x) => ReceivePoke(port, x)
}
def ReceivePoke(port: String, x: Any)
}
trait Peeked extends Actor {
override def receive = {
case Peek(port) => ReceivePeek(port)
}
def ReceivePeek(port: String)
}
Bây giờ xem xét tôi có thể tạo ra một diễn viên mới mà thực hiện cả hai đặc điểm:
val peekedpoked = actorRef(new Actor extends Poked with Peeked)
Làm thế nào để soạn nhận xử lý? ví dụ, người nhận nên một cái gì đó giống như đoạn mã sau, mặc dù "tự động tạo ra" (tức là tất cả những đặc điểm cần soạn):
def receive = (Poked.receive: Receive) orElse (Peeked.receive: Receive) orElse ...
Đó là rất thú vị, cảm ơn bạn :-) Nhưng nó giả định trước sự tồn tại của một loại IntOrString đó là cả một Int và một String, và rằng IntOrString biết điều đó nên soạn những người (trong đó, nếu tôi đang xây dựng một khuôn khổ, người kia có thể bỏ qua). Không phải là có thể làm cho các đặc điểm của IntActor và StringActor tự động soạn thảo? –
Trình tự được đưa ra bằng cách tuyến tính hóa các đặc tính hỗn hợp, do đó có thể dự đoán được ;-) Và việc sử dụng tính năng chuẩn bị khớp với giá trị ghi đè các đặc điểm sau đó là wrt. trước đó, vì vậy tôi nghĩ rằng giải pháp của bạn là rất tốt đẹp! –
Hiển thị tuyệt vời của scala-fu của bạn! :-) –