मैंने एक सुनवाई/श्रोता विशेषता लागू की है जिसे अभिनेताओं में जोड़ा जा सकता है। मैं सोच रहा हूं कि श्रोता को स्पष्ट रूप से कॉल करने के बिना किसी अभिनेता को इस शैली की विशेषता को संलग्न करना संभव है, हैडलर विधि?रचनाकार अभिनेता
इसके अलावा मैं अक्का पुस्तकालय में इस कार्यक्षमता को खोजने की उम्मीद कर रहा था। क्या मुझे कुछ याद आ रहा है या क्या कोई कारण है कि अक्का इसमें शामिल नहीं होगा?
trait Listenable { this: Actor =>
private var listeners: List[Actor] = Nil
protected def listenerHandler: PartialFunction[Any, Unit] = {
case AddListener(who) => listeners = who :: listeners
}
protected def notifyListeners(event: Any) = {
listeners.foreach(_.send(event))
}
}
class SomeActor extends Actor with Listenable
{
def receive = listenerHandler orElse {
case Start => notifyListeners(Started())
case Stop => notifyListeners(Stopped())
}
}
खैर यह है बात है, दोनों स्थितियों में मैं फोन करने के लिए eit याद करने के लिए होगा उसका super.receive या * श्रोता हेल्डर *। मैं सोच रहा था कि सामान्य रूप से स्कैला में कोई तंत्र या किसी भी अभिनेता पुस्तकालयों में एक तंत्र था जिसने अभिनेता को सुने जाने योग्य को कुछ भी करने की अनुमति नहीं दी थी, सिवाय इसके कि: * सुनने योग्य * –
के साथ आपको केवल इतना कहना होगा कि 'सुनोएबलएक्टर' 'अभिनेता को बढ़ाता है' के बजाए; 'सुनोएबलएक्टर' के अंदर आप पहले से ही 'प्राप्त' (और, संभवतः, 'प्राप्त करेंथिन') ओवरराइड कर चुके होंगे। दानिय्येल का जवाब भी देखें। –