2011-10-25 25 views
5

में सदस्यता लें मैं स्कैला के लिए नया हूं, और मैं प्रकाशक-सदस्यता उपयोग में देख रहा हूं। मेरे Google कौशल में कोई समस्या हो सकती है, लेकिन मुझे इस उपयोग का एक उदाहरण नहीं मिल रहा है जहां मैं निर्दिष्ट कर सकता हूं कि ग्राहक द्वारा कौन सी घटनाओं को देखा जाना चाहिए।प्रकाशक स्केल

किसी को भी कुछ उदाहरण मिल गए हैं?

धन्यवाद!

उत्तर

4

यदि आपको कुछ सचमुच सरल की आवश्यकता है, तो मैं सुझाव देता हूं कि यह स्वयं स्वयं करें, यह कठिन नहीं होना चाहिए। लेकिन अगर आप कुछ बड़ा चाहते हैं तो आप Eventbus देख सकते हैं। यह जावा lib है, लेकिन मैं इसे स्कैला के साथ भी उपयोग कर रहा हूं।

स्काला में एक उदाहरण कार्यान्वयन http://jim-mcbeath.blogspot.com/2009/10/simple-publishsubscribe-example-in.html

+0

खैर मैं जिम McBeath की ट्यूटोरियल देखा है, लेकिन वास्तव में मैं (स्केल प्रकाशक विशेषता के एक कार्यान्वयन http://www.scala-lang.org/api के लिए देख रहा हूँ /2.7.1/scala/collection/mutable/Publisher.html) – user485659

+0

मुझे भी एक नहीं मिला। वास्तव में कार्यान्वयन से आपको क्या रोक रहा है? एक प्रकाशक केवल एक प्रकार की घटना प्रकाशित करेगा। लेकिन यदि यह विषय आपको रूचि देता है, तो आप इनगो मायर, टियर बाम्पप, मार्टिन ओडर्स्की से [पर्यवेक्षक पैटर्न को अस्वीकार कर सकते हैं] (http://lamp.epfl.ch/~imaier/pub/DeprecatingObserversTR2010.pdf) देख सकते हैं। – hellectronic

+0

असल में मैं कक्षा की निगरानी करने का एक तरीका ढूंढ रहा हूं: जैसे ही इसकी कोई भी विधि समाप्त हो जाती है, मैं कुछ मॉनिटर क्लास को ईवेंट कैप्चर करना और कुछ सामान करना चाहता हूं। इसलिए मैं एक तरीका ढूंढ रहा हूं कि प्रकाशक वर्ग की प्रत्येक विधि स्वचालित रूप से प्रकाशित होने पर प्रकाशित हो जाती है। – user485659

4

में वर्णन किया गया एक सरल संदर्भ उदाहरण http://comments.gmane.org/gmane.comp.lang.scala.user/63002 पर पाया जा सकता:

case class MyEvent(number: Int) 

class PrintIt extends Subscriber[MyEvent, Publisher[MyEvent]] { 
    override def notify(pub: Publisher[MyEvent], event: MyEvent): Unit = { 
    println("got an event: " + event) 
    } 
} 

class RunIt extends Publisher[MyEvent] { 
    def pub() = publish(MyEvent(12)) 
} 

object Main extends App { 
    val runIt = new RunIt() 
    runIt.subscribe(new PrintIt) 
    runIt.pub() 
} 
2

आप यहाँ एक सरल EventBus कार्यान्वयन पा सकते हैं। यह एसिंक घटना प्रबंधन और अनुसूचित घटना प्रकाशन भी करता है।

https://github.com/hipjim/scala-event-bus

case class Msg(content: String) 
val eb = EventBus() 
eb.subscribe[Msg] { t => 
    println(t.content) 
} 

for (i <- 1 to 100) 
eb.post(Msg(i.toString))