2011-10-25 26 views
5

Tôi mới sử dụng scala và tôi đang xem xét việc sử dụng Nhà xuất bản-Đăng ký. Có thể có vấn đề với kỹ năng Google của tôi, nhưng tôi dường như không thể tìm thấy ví dụ về cách sử dụng này, nơi tôi có thể chỉ định người đăng ký sẽ quan sát sự kiện nào.Đăng ký nhà xuất bản ở Scala

Bất kỳ ai cũng có một số ví dụ?

Cảm ơn!

Trả lời

4

Nếu bạn cần một cái gì đó thực sự đơn giản, sau đó tôi đề nghị làm điều đó tự của bạn, nó không phải là khó khăn. Nhưng nếu bạn muốn một cái gì đó lớn hơn thì bạn có thể xem Eventbus. Nó là Java lib, nhưng tôi đang sử dụng nó với Scala quá.

An thực hiện ví dụ trong Scala được mô tả trong http://jim-mcbeath.blogspot.com/2009/10/simple-publishsubscribe-example-in.html

+0

Vâng, tôi đã nhìn thấy các hướng dẫn của Jim McBeath, nhưng thực sự tôi đang tìm một thực hiện các đặc điểm Publisher Scale (http://www.scala-lang.org/api /2.7.1/scala/collection/mutable/Publisher.html) – user485659

+0

Tôi cũng không tìm thấy. Điều gì đang ngăn bạn chính xác từ việc thực hiện? Nhà xuất bản sẽ chỉ xuất bản một loại sự kiện. Nhưng nếu chủ đề này bạn quan tâm, bạn có thể xem xét [Ngừng sử dụng mẫu quan sát] (http://lamp.epfl.ch/~imaier/pub/DeprecatingObserversTR2010.pdf) từ Ingo Maier, Tiark Rompf, Martin Odersky. – hellectronic

+0

Thực ra tôi đang tìm cách theo dõi một lớp: ngay sau khi bất kỳ phương pháp nào của nó được hoàn thành, tôi muốn một số lớp màn hình để nắm bắt sự kiện và làm một số công cụ. Vì vậy, tôi đang tìm cách để mỗi phương thức của lớp nhà xuất bản tự động xuất bản khi nó được hoàn thành. – user485659

4

Một ví dụ tham khảo đơn giản có thể được tìm thấy trên 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

Bạn có thể tìm thấy một thi EventBus đơn giản ở đây. Nó cũng xử lý sự kiện async và xuất bản sự kiện theo lịch trình.

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)) 
Các vấn đề liên quan